home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / 3DTOSHI2.ZIP / mpg3d / source / Lg3drasw.asm < prev    next >
Encoding:
Assembly Source File  |  1996-04-28  |  102.1 KB  |  4,454 lines

  1.  
  2. ; lg3drasw.asm
  3. ;
  4. ; Copyright (c) 1996 by Toshiaki Tsuji, all rights reserved.
  5.  
  6. ; Functions
  7. PUBLIC _SetViewPortData_
  8.  
  9. PUBLIC _DrawSolidNoHorz_, _DrawSolidGrdHorz_
  10. PUBLIC _DrawTextureNoHorz_, _DrawTextureFlatHorz_, _DrawTextureGrdHorz_
  11.  
  12. PUBLIC _DrawSolidNoTransHorz_, _DrawSolidGrdTransHorz_
  13. PUBLIC _DrawTextureNoTransHorz_, _DrawTextureFlatTransHorz_
  14. PUBLIC _DrawTextureGrdTransHorz_
  15.  
  16. PUBLIC _DrawSolidNoHazeHorz_, _DrawSolidGrdHazeHorz_
  17. PUBLIC _DrawTextureNoHazeHorz_, _DrawTextureFlatHazeHorz_, _DrawTextureGrdHazeHorz_
  18.  
  19. ; Data
  20. PUBLIC __LeftX, __LeftY, __LeftU, __LeftV, __LeftI, __LeftH, __LeftZ
  21. PUBLIC __RightX, __RightY, __RightU, __RightV, __RightI, __RightH, __RightZ
  22. PUBLIC __LeftDx, __LeftDy, __LeftDu, __LeftDv, __LeftDI, __LeftDh, __LeftDz 
  23. PUBLIC __RightDx, __RightDy, __RightDu, __RightDv, __RightDI, __RightDh, __RightDz 
  24. PUBLIC __DestBuffer, __AddDest, __ShadeBuffer, __TextureBuffer, __BlendBuffer
  25. PUBLIC __HazeBuffer
  26. PUBLIC __DivTable
  27.  
  28. .DATA
  29.   __LeftX    DD 0 
  30.   __LeftY    DD 0 
  31.   __LeftU    DD 0 
  32.   __LeftV    DD 0 
  33.   __LeftI    DD 0 
  34.   __LeftZ    DD 0
  35.   __LeftH    DD 0
  36.   
  37.   __RightX   DD 0 
  38.   __RightY   DD 0 
  39.   __RightU   DD 0 
  40.   __RightV   DD 0 
  41.   __RightI   DD 0 
  42.   __RightZ   DD 0
  43.   __RightH   DD 0
  44.   
  45.   __LeftDx    DD 0 
  46.   __LeftDy    DD 0 
  47.   __LeftDu    DD 0 
  48.   __LeftDv    DD 0 
  49.   __LeftDI    DD 0 
  50.   __LeftDz    DD 0
  51.   __LeftDh    DD 0
  52.   
  53.   __RightDx   DD 0 
  54.   __RightDy   DD 0 
  55.   __RightDu   DD 0 
  56.   __RightDv   DD 0 
  57.   __RightDI   DD 0 
  58.   __RightDz   DD 0
  59.   __RightDh   DD 0
  60.     
  61.   __DestBuffer  DD 0
  62.   __TextureBuffer  DD 0
  63.   __AddDest     DD 0
  64.   __ShadeBuffer DD 0
  65.   __BlendBuffer DD 0
  66.   __HazeBuffer  DD 0
  67.   __DivTable    DD 0
  68.  
  69.   Color     DD 0  
  70.   LoopCount DD 0 
  71.   VMinX     DD 0
  72.   VMaxX     DD 0
  73.   VMinY     DD 0
  74.   VMaxY     DD 0
  75.   TempLen   DD 0  ; Before Clipped
  76.   TempVal   DD 0 
  77.   
  78.   ; Inner Loop Delta
  79.   InDeltaDI DD 0
  80.   InDeltaDu DD 0
  81.   InDeltaDv DD 0
  82.   InDeltaDh DD 0
  83.  
  84.   DummyFloat DD 0
  85.   InLoopCount DW 0
  86.  
  87.   DvD0   DD 0
  88.   D0Du   DW 0
  89.   DID0   DD 0
  90.  
  91. .CODE
  92. .486
  93.  
  94. ; _SetViewPortData ( LONG MinX, LONG MinY, LONG MaxX, LONG MaxY )
  95. ;
  96. ; EAX = MinX, EDX = MinY, EBX = MaxX, ECX = MaxY
  97.  
  98. _SetViewPortData_ PROC C
  99.   mov  VMinX, EAX
  100.   mov  VMinY, EDX
  101.   mov  VMaxX, EBX
  102.   mov  VMaxY, ECX
  103.   ret
  104. _SetViewPortData_ ENDP 
  105.  
  106.  
  107. ; _DrawSolidNoHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  108. ;
  109. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  110.  
  111. _DrawSolidNoHorz_ PROC C
  112.   push EBP
  113.   push EDI
  114.   push ESI  
  115.   
  116.   mov  Color, EAX
  117.  
  118.   sub  EDX, EBX
  119.   mov  LoopCount, EDX
  120.  
  121.   cmp  EBX, 0
  122.   je   CheckClippedSolidNoHorz 
  123.  
  124.     mov  EAX, __LeftDx
  125.     imul  EBX
  126.     add  __LeftX, EAX
  127.  
  128.     mov  EAX, __RightDx
  129.     imul  EBX
  130.     add  __RightX, EAX
  131.  
  132.     mov  EAX, __AddDest
  133.     imul  EBX
  134.     add  __DestBuffer, EAX
  135.  
  136.   CheckClippedSolidNoHorz :
  137.     cmp  ECX, 0
  138.     jne  DrawSolidNoHorzClip
  139.  
  140.   DrawSolidNoHorzNoClip :
  141.     cld
  142.     mov  ESI, LoopCount
  143.     cmp  ESI, 0
  144.     jle  EndLoopOutSolidNoHorz
  145.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  146.     nop          
  147.  
  148.     LoopOutSolidNoHorz :
  149.       mov  EBX, __LeftX    ; U
  150.       mov  EAX, EBX        ; U
  151.       add  EBX, __LeftDx   ; V
  152.       sar  EAX, 16         ; U EAX is the Left X
  153.       mov  __LeftX, EBX    ; V
  154.  
  155.       mov  EDX, __RightX   ; U
  156.       mov  ECX, EDX        ; U
  157.       add  EDX, __RightDx  ; V
  158.       sar  ECX, 16         ; U ECX is the Right X
  159.       mov  __RightX, EDX   ; V
  160.  
  161.       mov  EBX, __DestBuffer  ; U
  162.       mov  EDI, EBX           ; U
  163.       add  EBX, __AddDest     ; V
  164.       mov  __DestBuffer, EBX  ; U
  165.  
  166.       sub  ECX, EAX           ; V
  167.       add  EDI, EAX           ; U
  168.       inc  ECX                ; V
  169.       cmp  ECX, 0
  170.       jle  NextRowSolidNoHorzNoClip 
  171.  
  172.       mov  EAX, Color         ; U
  173.       mov  EDX, ECX           ; V
  174.     
  175.       shr  ECX, 2             ; U
  176.       and  EDX, 3             ; V
  177.       rep  stosd
  178.       mov  ECX, EDX
  179.       rep  stosb
  180.  
  181.       NextRowSolidNoHorzNoClip :
  182.         dec  ESI
  183.         jnz  LoopOutSolidNoHorz
  184.       jmp  EndLoopOutSolidNoHorz
  185.  
  186.   DrawSolidNoHorzClip :
  187.     cld
  188.     mov  ESI, LoopCount
  189.     cmp  ESI, 0
  190.     jle  EndLoopOutSolidNoHorz
  191.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  192.     nop          
  193.  
  194.     LoopOutClippedSolidNoHorz :
  195.       mov  EBX, __LeftX    ; U
  196.       mov  EAX, EBX        ; U
  197.       add  EBX, __LeftDx   ; V
  198.       sar  EAX, 16         ; U EAX is the Left X
  199.       mov  __LeftX, EBX    ; V
  200.  
  201.       mov  EDX, __RightX   ; U
  202.       mov  ECX, EDX        ; U
  203.       add  EDX, __RightDx  ; V
  204.       sar  ECX, 16         ; U ECX is the Right X
  205.       mov  __RightX, EDX   ; V
  206.  
  207.       mov  EBX, __DestBuffer  ; U
  208.       mov  EDI, EBX           ; U
  209.       add  EBX, __AddDest     ; V
  210.       mov  __DestBuffer, EBX  ; U
  211.  
  212.         ; Check for Easy reject
  213.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  214.         jg   NextRowSolidNoHorz
  215.         cmp  ECX, VMinX      ; Right is smaller than MinX
  216.         jl   NextRowSolidNoHorz
  217.  
  218.         ; Check for Left
  219.         cmp  EAX, VMinX
  220.         jge  CheckRightSolidNoHorz
  221.           mov  EAX, VMinX    ; Set Left to MinX
  222.  
  223.         ; Check for Right
  224.       CheckRightSolidNoHorz :
  225.         cmp  ECX, VMaxX
  226.         jle  StartSolidNoHorz
  227.         mov  ECX, VMaxX    ; Set Right to MaxX
  228.  
  229.     StartSolidNoHorz :
  230.       sub  ECX, EAX
  231.       inc  ECX
  232.       cmp  ECX, 0
  233.       jle  NextRowSolidNoHorz
  234.  
  235.       add  EDI, EAX           
  236.  
  237.       mov  EAX, Color         
  238.       mov  EDX, ECX           
  239.     
  240.       shr  ECX, 2             
  241.       and  EDX, 3             
  242.       rep  stosd
  243.       mov  ECX, EDX
  244.       rep  stosb
  245.     
  246.       NextRowSolidNoHorz : 
  247.         dec  ESI
  248.       jnz  LoopOutClippedSolidNoHorz
  249.  
  250.   EndLoopOutSolidNoHorz :
  251.  
  252.   pop  ESI
  253.   pop  EDI
  254.   pop  EBP
  255.   ret
  256. _DrawSolidNoHorz_ ENDP
  257.  
  258.  
  259. ; _DrawSolidGrdHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  260. ;
  261. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  262.  
  263. _DrawSolidGrdHorz_ PROC C
  264.   push EBP
  265.   push EDI
  266.   push ESI  
  267.   
  268.   mov  Color, EAX
  269.  
  270.   sub  EDX, EBX
  271.   mov  LoopCount, EDX
  272.  
  273.   cmp  EBX, 0
  274.   je   CheckClippedSolidGrdHorz 
  275.  
  276.     mov  EAX, __LeftDx
  277.     imul  EBX
  278.     add  __LeftX, EAX
  279.  
  280.     mov  EAX, __RightDx
  281.     imul  EBX
  282.     add  __RightX, EAX
  283.  
  284.     mov  EAX, __LeftDI
  285.     imul  EBX
  286.     add  __LeftI, EAX
  287.  
  288.     mov  EAX, __RightDI
  289.     imul  EBX
  290.     add  __RightI, EAX
  291.  
  292.     mov  EAX, __AddDest
  293.     imul  EBX
  294.     add  __DestBuffer, EAX
  295.  
  296.   CheckClippedSolidGrdHorz :
  297.     cmp  ECX, 0
  298.     jne  DrawSolidGrdHorzClip
  299.  
  300.   DrawSolidGrdHorzNoClip :
  301.     cld
  302.     mov  ESI, LoopCount
  303.     cmp  ESI, 0
  304.     jle  EndLoopOutSolidGrdHorz
  305.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  306.     nop          
  307.  
  308.     LoopOutSolidGrdHorz :
  309.       mov  EBX, __LeftX    ; U
  310.       mov  EAX, EBX        ; U
  311.       add  EBX, __LeftDx   ; V
  312.       sar  EAX, 16         ; U EAX is the Left X
  313.       mov  __LeftX, EBX    ; V
  314.  
  315.       mov  EDX, __RightX   ; U
  316.       mov  ECX, EDX        ; U
  317.       add  EDX, __RightDx  ; V
  318.       sar  ECX, 16         ; U ECX is the Right X
  319.       mov  __RightX, EDX   ; V
  320.  
  321.       mov  EBX, __DestBuffer  ; U
  322.       mov  EDI, EBX           ; U
  323.       add  EBX, __AddDest     ; V
  324.       sub  ECX, EAX           ; U
  325.  
  326.       mov  __DestBuffer, EBX  ; V
  327.  
  328.       add  EDI, EAX           ; U
  329.       inc  ECX                ; V
  330.       
  331.       mov  EBX, __LeftI    ; U
  332.       mov  EAX, EBX        ; U     EAX is the Left I
  333.       add  EBX, __LeftDI   ; V
  334.       mov  __LeftI, EBX    ; V
  335.       
  336.       mov  EBX, __RightI   ; U
  337.       mov  EDX, EBX        ; U     EDX is the Right I
  338.       add  EBX, __RightDI  ; V
  339.       mov  __RightI, EBX   ; V
  340.       
  341.       cmp  ECX, 0
  342.       jle  NextRowSolidGrdHorzNoClip
  343.  
  344.       mov  EBX, EAX        ; EBX is the Left I
  345.       sub  EDX, EAX
  346.       mov  EAX, EDX
  347.       sar  EDX, 01Fh
  348.       idiv ECX
  349.       mov  InDeltaDI, EAX
  350.  
  351.       mov  EBP, EBX
  352.       mov  EAX, Color        
  353.       mov  EDX, InDeltaDI 
  354.       push ESI
  355.       mov  ESI, __ShadeBuffer
  356.       
  357.         InLoopSolidGrdHorz :
  358.           mov  EBX, EBP
  359.           shr  EBX, 8
  360.           mov  BL, AL
  361.           add  EBP, EDX
  362.           mov  AH, [EBX+ESI]
  363.           mov  [EDI], AH
  364.           inc  EDI
  365.           loop InLoopSolidGrdHorz
  366.  
  367.       pop  ESI
  368.  
  369.       NextRowSolidGrdHorzNoClip :
  370.         dec  ESI
  371.         jnz  LoopOutSolidGrdHorz
  372.       jmp  EndLoopOutSolidGrdHorz
  373.  
  374.   DrawSolidGrdHorzClip :
  375.     cld
  376.     mov  ESI, LoopCount
  377.     cmp  ESI, 0
  378.     jle  EndLoopOutSolidGrdHorz
  379.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  380.     nop          
  381.  
  382.     LoopOutClippedSolidGrdHorz :
  383.       mov  EBX, __LeftX    ; U
  384.       mov  EAX, EBX        ; U
  385.       add  EBX, __LeftDx   ; V
  386.       sar  EAX, 16         ; U EAX is the Left X
  387.       mov  __LeftX, EBX    ; V
  388.  
  389.       mov  EDX, __RightX   ; U
  390.       mov  ECX, EDX        ; U
  391.       add  EDX, __RightDx  ; V
  392.       sar  ECX, 16         ; U ECX is the Right X
  393.       mov  __RightX, EDX   ; V
  394.  
  395.       mov  EBX, __DestBuffer  ; U
  396.       mov  EDI, EBX           ; U
  397.       add  EBX, __AddDest     ; V
  398.       mov  __DestBuffer, EBX  ; U
  399.  
  400.       mov  TempLen, ECX
  401.       sub  TempLen, EAX
  402.       inc  TempLen
  403.       mov  EBX, 0
  404.  
  405.         ; Check for Easy reject
  406.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  407.         jg   NextRowSolidGrdHorz
  408.         cmp  ECX, VMinX      ; Right is smaller than MinX
  409.         jl   NextRowSolidGrdHorz
  410.  
  411.         ; Check for Left
  412.         cmp  EAX, VMinX
  413.         jge  CheckRightSolidGrdHorz
  414.           mov  EBX, VMinX
  415.           sub  EBX, EAX
  416.           mov  EAX, VMinX    ; Set Left to MinX
  417.  
  418.         ; Check for Right
  419.         CheckRightSolidGrdHorz :
  420.           cmp  ECX, VMaxX
  421.           jle  StartSolidGrdHorz
  422.           mov  ECX, VMaxX    ; Set Right to MaxX
  423.  
  424.     StartSolidGrdHorz :  ; Clipped
  425.       sub  ECX, EAX
  426.       inc  ECX
  427.  
  428.       add  EDI, EAX
  429.  
  430.       mov  EBP, TempLen    ; EBP is the loop count before clipped
  431.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  432.  
  433.       mov  EBX, __LeftI    ; U
  434.       mov  EAX, EBX        ; U   EAX is the Left I
  435.       add  EBX, __LeftDI   ; V
  436.       mov  __LeftI, EBX    ; V
  437.       
  438.       mov  EBX, __RightI   ; U
  439.       mov  EDX, EBX        ; U   EDX is the Right I
  440.       add  EBX, __RightDI  ; V
  441.       mov  __RightI, EBX   ; V
  442.             
  443.       cmp  ECX, 0
  444.       jle  NextRowSolidGrdHorz
  445.  
  446.       mov  EBX, EAX        ; EAX is Left I
  447.       sub  EDX, EAX
  448.       mov  EAX, EDX
  449.       sar  EDX, 01Fh
  450.       idiv EBP
  451.       mov  InDeltaDI, EAX
  452.  
  453.       ; Add Delta for Skipped pixel
  454.       mov  EBP, EBX
  455.       mov  EAX, InDeltaDI
  456.       imul TempLen 
  457.       add  EBP, EAX
  458.  
  459.       mov  EAX, Color        
  460.       mov  EDX, InDeltaDI 
  461.       push ESI
  462.       mov  ESI, __ShadeBuffer
  463.       
  464.         InLoopClippedSolidGrdHorz :
  465.           mov  EBX, EBP
  466.           shr  EBX, 8
  467.           mov  BL, AL
  468.           mov  AH, [EBX+ESI]
  469.           add  EBP, EDX
  470.           mov  [EDI], AH
  471.           inc  EDI
  472.           loop InLoopClippedSolidGrdHorz
  473.     
  474.       pop  ESI
  475.       NextRowSolidGrdHorz : 
  476.         dec  ESI
  477.       jnz  LoopOutClippedSolidGrdHorz
  478.  
  479.   EndLoopOutSolidGrdHorz :
  480.  
  481.   pop  ESI
  482.   pop  EDI
  483.   pop  EBP
  484.   ret
  485. _DrawSolidGrdHorz_ ENDP
  486.  
  487.  
  488. ; _DrawTextureNoHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  489. ;
  490. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  491.  
  492. _DrawTextureNoHorz_ PROC C
  493.   push EBP
  494.   push EDI
  495.   push ESI  
  496.   
  497.   sub  EDX, EBX
  498.   mov  LoopCount, EDX
  499.  
  500.   cmp  EBX, 0
  501.   je   CheckClippedTextureNoHorz 
  502.  
  503.     mov  EAX, __LeftDx
  504.     imul  EBX
  505.     add  __LeftX, EAX
  506.  
  507.     mov  EAX, __RightDx
  508.     imul  EBX
  509.     add  __RightX, EAX
  510.  
  511.     mov  EAX, __LeftDu
  512.     imul  EBX
  513.     add  __LeftU, EAX
  514.  
  515.     mov  EAX, __RightDu
  516.     imul  EBX
  517.     add  __RightU, EAX
  518.  
  519.     mov  EAX, __LeftDv
  520.     imul  EBX
  521.     add  __LeftV, EAX
  522.  
  523.     mov  EAX, __RightDv
  524.     imul  EBX
  525.     add  __RightV, EAX
  526.  
  527.     mov  EAX, __AddDest
  528.     imul  EBX
  529.     add  __DestBuffer, EAX
  530.  
  531.   CheckClippedTextureNoHorz :
  532.     cmp  ECX, 0
  533.     jne  DrawTextureNoHorzClip
  534.  
  535.   DrawTextureNoHorzNoClip :
  536.     cld
  537.     mov  ESI, LoopCount
  538.     cmp  ESI, 0
  539.     jle  EndLoopOutTextureNoHorz
  540.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  541.     nop          
  542.  
  543.     LoopOutTextureNoHorz :
  544.       mov  EBX, __LeftX    ; U
  545.       mov  EAX, EBX        ; U
  546.       add  EBX, __LeftDx   ; V
  547.       sar  EAX, 16         ; U EAX is the Left X
  548.       mov  __LeftX, EBX    ; V
  549.  
  550.       mov  EDX, __RightX   ; U
  551.       mov  ECX, EDX        ; U
  552.       add  EDX, __RightDx  ; V
  553.       sar  ECX, 16         ; U ECX is the Right X
  554.       mov  __RightX, EDX   ; V
  555.  
  556.       mov  EBX, __DestBuffer  ; U
  557.       mov  EDI, EBX           ; U
  558.       add  EBX, __AddDest     ; V
  559.       mov  __DestBuffer, EBX  ; U
  560.  
  561.       sub  ECX, EAX           ; V
  562.       add  EDI, EAX           ; U
  563.       inc  ECX                ; V
  564.             
  565.       cmp  ECX, 0
  566.       jle  NextRowTextureNoHorzNoClip
  567.  
  568.       mov  EBP, ECX
  569.       shl  EBP, 2
  570.       add  EBP, __DivTable
  571.       fld  dword ptr [EBP] 
  572.       
  573.       mov  EBP, ECX      ; EBP is the loop
  574.  
  575.       mov  EAX, __LeftU    
  576.       mov  EDX, __RightU         
  577.       sub  EDX, EAX
  578.       sar  EDX, 8
  579.       mov  InDeltaDu, EDX
  580.       fild InDeltaDu      
  581.       fmul st, st(1)
  582.       fistp InDeltaDu
  583.       
  584.       mov  EAX, __LeftV    
  585.       mov  EDX, __RightV         
  586.       sub  EDX, EAX
  587.       sar  EDX, 8
  588.       mov  InDeltaDv, EDX
  589.       fild InDeltaDv      
  590.       fmul st, st(1)
  591.       fistp InDeltaDv
  592.  
  593.       fstp DummyFloat
  594.  
  595.       push ESI
  596.  
  597.       mov  ECX, __LeftU
  598.       sar  ECX, 8
  599.       mov  EDX, __LeftV
  600.       sar  EDX, 8
  601.       mov  ESI, __TextureBuffer
  602.       mov  EBX, 0
  603.  
  604.         InLoopTextureNoHorz :
  605.           mov  BH, DH
  606.           mov  BL, CH
  607.           add  ECX, InDeltaDu
  608.           mov  AL, [EBX+ESI]
  609.           add  EDX, InDeltaDv
  610.           mov  [EDI], AL
  611.           inc  EDI
  612.           dec  EBP
  613.           jnz  InLoopTextureNoHorz
  614.  
  615.       pop  ESI
  616.  
  617.       NextRowTextureNoHorzNoClip :
  618.  
  619.       mov  EAX, __LeftU
  620.       mov  EBX, __LeftV
  621.       add  EAX, __LeftDu
  622.       add  EBX, __LeftDv
  623.       mov  __LeftU, EAX
  624.       mov  __LeftV, EBX
  625.  
  626.       mov  EAX, __RightU
  627.       mov  EBX, __RightV
  628.       add  EAX, __RightDu
  629.       add  EBX, __RightDv
  630.       mov  __RightU, EAX
  631.       mov  __RightV, EBX
  632.  
  633.       dec  ESI
  634.       jnz  LoopOutTextureNoHorz
  635.       jmp  EndLoopOutTextureNoHorz
  636.  
  637.   DrawTextureNoHorzClip :
  638.     cld
  639.     mov  ESI, LoopCount
  640.     cmp  ESI, 0
  641.     jle  EndLoopOutTextureNoHorz
  642.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  643.     nop          
  644.  
  645.     LoopOutClippedTextureNoHorz :
  646.       mov  EBX, __LeftX    ; U
  647.       mov  EAX, EBX        ; U
  648.       add  EBX, __LeftDx   ; V
  649.       sar  EAX, 16         ; U EAX is the Left X
  650.       mov  __LeftX, EBX    ; V
  651.  
  652.       mov  EDX, __RightX   ; U
  653.       mov  ECX, EDX        ; U
  654.       add  EDX, __RightDx  ; V
  655.       sar  ECX, 16         ; U ECX is the Right X
  656.       mov  __RightX, EDX   ; V
  657.  
  658.       mov  EBX, __DestBuffer  ; U
  659.       mov  EDI, EBX           ; U
  660.       add  EBX, __AddDest     ; V
  661.       mov  __DestBuffer, EBX  ; U
  662.  
  663.       mov  TempLen, ECX
  664.       sub  TempLen, EAX
  665.       inc  TempLen
  666.       mov  EBX, 0
  667.  
  668.         ; Check for Easy reject
  669.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  670.         jg   NextRowTextureNoHorz
  671.         cmp  ECX, VMinX      ; Right is smaller than MinX
  672.         jl   NextRowTextureNoHorz
  673.  
  674.         ; Check for Left
  675.         cmp  EAX, VMinX
  676.         jge  CheckRightTextureNoHorz
  677.           mov  EBX, VMinX
  678.           sub  EBX, EAX
  679.           mov  EAX, VMinX    ; Set Left to MinX
  680.  
  681.         ; Check for Right
  682.       CheckRightTextureNoHorz :
  683.         cmp  ECX, VMaxX
  684.         jle  StartTextureNoHorz
  685.         mov  ECX, VMaxX    ; Set Right to MaxX
  686.  
  687.     StartTextureNoHorz :
  688.       sub  ECX, EAX
  689.       inc  ECX
  690.  
  691.       cmp  ECX, 0
  692.       jle  NextRowTextureNoHorz
  693.  
  694.       add  EDI, EAX
  695.  
  696.       mov  EBP, TempLen
  697.       shl  EBP, 2
  698.       add  EBP, __DivTable
  699.       fld  dword ptr [EBP]
  700.       
  701.       mov  EBP, ECX      ; EBP is the loop
  702.       mov  TempLen, EBX
  703.  
  704.       mov  EAX, __LeftU
  705.       mov  EDX, __RightU         
  706.       sub  EDX, EAX
  707.       sar  EDX, 8
  708.       mov  InDeltaDu, EDX
  709.       fild InDeltaDu      
  710.       fmul st, st(1)
  711.       fistp InDeltaDu
  712.       
  713.       mov  EAX, __LeftV    
  714.       mov  EDX, __RightV         
  715.       sub  EDX, EAX
  716.       sar  EDX, 8
  717.       mov  InDeltaDv, EDX
  718.       fild InDeltaDv      
  719.       fmul st, st(1)
  720.       fistp InDeltaDv
  721.  
  722.       fstp  DummyFloat
  723.  
  724.       push ESI
  725.  
  726.       mov  EAX, InDeltaDu
  727.       imul TempLen
  728.       mov  ECX, __LeftU
  729.       sar  ECX, 8
  730.       add  ECX, EAX
  731.  
  732.       mov  EAX, InDeltaDv
  733.       imul TempLen
  734.       mov  EDX, __LeftV
  735.       sar  EDX, 8
  736.       add  EDX, EAX
  737.  
  738.       mov  ESI, __TextureBuffer
  739.       mov  EBX, 0
  740.  
  741.         InLoopClippedTextureNoHorz :
  742.           mov  BH, DH
  743.           mov  BL, CH
  744.           add  ECX, InDeltaDu
  745.           mov  AL, [EBX+ESI]
  746.           add  EDX, InDeltaDv
  747.           mov  [EDI], AL
  748.           inc  EDI
  749.           dec  EBP
  750.           jnz  InLoopClippedTextureNoHorz
  751.  
  752.       pop  ESI
  753.  
  754.       NextRowTextureNoHorz : 
  755.         mov  EAX, __LeftU
  756.         mov  EBX, __LeftV
  757.         add  EAX, __LeftDu
  758.         add  EBX, __LeftDv
  759.         mov  __LeftU, EAX
  760.         mov  __LeftV, EBX
  761.  
  762.         mov  EAX, __RightU
  763.         mov  EBX, __RightV
  764.         add  EAX, __RightDu
  765.         add  EBX, __RightDv
  766.         mov  __RightU, EAX
  767.         mov  __RightV, EBX
  768.  
  769.         dec  ESI
  770.       jnz  LoopOutClippedTextureNoHorz
  771.  
  772.   EndLoopOutTextureNoHorz :
  773.  
  774.   pop  ESI
  775.   pop  EDI
  776.   pop  EBP
  777.   ret
  778. _DrawTextureNoHorz_ ENDP
  779.  
  780.  
  781. ; _DrawTextureFlatHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  782. ;
  783. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  784.  
  785. _DrawTextureFlatHorz_ PROC C
  786.   push EBP
  787.   push EDI
  788.   push ESI  
  789.   
  790.   sub  EDX, EBX
  791.   mov  LoopCount, EDX
  792.  
  793.   cmp  EBX, 0
  794.   je   CheckClippedTextureFlatHorz 
  795.  
  796.     mov  EAX, __LeftDx
  797.     imul  EBX
  798.     add  __LeftX, EAX
  799.  
  800.     mov  EAX, __RightDx
  801.     imul  EBX
  802.     add  __RightX, EAX
  803.  
  804.     mov  EAX, __LeftDu
  805.     imul  EBX
  806.     add  __LeftU, EAX
  807.  
  808.     mov  EAX, __RightDu
  809.     imul  EBX
  810.     add  __RightU, EAX
  811.  
  812.     mov  EAX, __LeftDv
  813.     imul  EBX
  814.     add  __LeftV, EAX
  815.  
  816.     mov  EAX, __RightDv
  817.     imul  EBX
  818.     add  __RightV, EAX
  819.  
  820.     mov  EAX, __AddDest
  821.     imul  EBX
  822.     add  __DestBuffer, EAX
  823.  
  824.   CheckClippedTextureFlatHorz :
  825.     cmp  ECX, 0
  826.     jne  DrawTextureFlatHorzClip
  827.  
  828.   DrawTextureFlatHorzNoClip :
  829.     cld
  830.     mov  ESI, LoopCount
  831.     cmp  ESI, 0
  832.     jle  EndLoopOutTextureFlatHorz
  833.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  834.     nop          
  835.  
  836.     LoopOutTextureFlatHorz :
  837.       mov  EBX, __LeftX    ; U
  838.       mov  EAX, EBX        ; U
  839.       add  EBX, __LeftDx   ; V
  840.       sar  EAX, 16         ; U EAX is the Left X
  841.       mov  __LeftX, EBX    ; V
  842.  
  843.       mov  EDX, __RightX   ; U
  844.       mov  ECX, EDX        ; U
  845.       add  EDX, __RightDx  ; V
  846.       sar  ECX, 16         ; U ECX is the Right X
  847.       mov  __RightX, EDX   ; V
  848.  
  849.       mov  EBX, __DestBuffer  ; U
  850.       mov  EDI, EBX           ; U
  851.       add  EBX, __AddDest     ; V
  852.       sub  ECX, EAX           ; U
  853.  
  854.       mov  __DestBuffer, EBX  ; V
  855.  
  856.       add  EDI, EAX           ; U
  857.       inc  ECX                ; V
  858.  
  859.       cmp  ECX, 0
  860.       jle  NextRowTextureFlatHorzNoClip
  861.  
  862.       mov  EBP, ECX
  863.       shl  EBP, 2
  864.       add  EBP, __DivTable
  865.       fld  dword ptr [EBP]
  866.       
  867.       mov  EBP, ECX      ; EBP is the loop
  868.  
  869.       mov  EAX, __LeftU    
  870.       mov  EDX, __RightU         
  871.       sub  EDX, EAX
  872.       sar  EDX, 8
  873.       mov  InDeltaDu, EDX
  874.       fild InDeltaDu      
  875.       fmul st, st(1)
  876.       fistp InDeltaDu
  877.       
  878.       mov  EAX, __LeftV    
  879.       mov  EDX, __RightV         
  880.       sub  EDX, EAX
  881.       sar  EDX, 8
  882.       mov  InDeltaDv, EDX
  883.       fild InDeltaDv      
  884.       fmul st, st(1)
  885.       fistp InDeltaDv
  886.  
  887.       fstp DummyFloat
  888.  
  889.       push ESI
  890.  
  891.       mov  ECX, __LeftU
  892.       mov  EDX, __LeftV
  893.       sar  ECX, 8
  894.       sar  EDX, 8
  895.  
  896.       mov  EAX, __LeftI
  897.       sar  EAX, 8
  898.       mov  ESI, __ShadeBuffer
  899.       
  900.         InLoopTextureFlatHorz :
  901.           mov  EBX, 0
  902.           mov  BH, DH
  903.           mov  BL, CH
  904.           add  ECX, InDeltaDu
  905.           add  EBX, __TextureBuffer
  906.           mov  AL, [EBX]
  907.           add  EDX, InDeltaDv
  908.           mov  BL, [ESI+EAX]
  909.           mov  [EDI], BL
  910.           inc  EDI
  911.           dec  EBP
  912.           jnz  InLoopTextureFlatHorz
  913.     
  914.       pop  ESI
  915.  
  916.       NextRowTextureFlatHorzNoClip : 
  917.         mov  EAX, __LeftU
  918.         mov  EBX, __LeftV
  919.         add  EAX, __LeftDu
  920.         add  EBX, __LeftDv
  921.         mov  __LeftU, EAX
  922.         mov  __LeftV, EBX
  923.  
  924.         mov  EAX, __RightU
  925.         mov  EBX, __RightV
  926.         add  EAX, __RightDu
  927.         add  EBX, __RightDv
  928.         mov  __RightU, EAX
  929.         mov  __RightV, EBX
  930.  
  931.         dec  ESI
  932.       jnz  LoopOutTextureFlatHorz
  933.       jmp  EndLoopOutTextureFlatHorz
  934.  
  935.   DrawTextureFlatHorzClip :
  936.     cld
  937.     mov  ESI, LoopCount
  938.     cmp  ESI, 0
  939.     jle  EndLoopOutTextureFlatHorz
  940.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  941.     nop          
  942.  
  943.     LoopOutClippedTextureFlatHorz :
  944.       mov  EBX, __LeftX    ; U
  945.       mov  EAX, EBX        ; U
  946.       add  EBX, __LeftDx   ; V
  947.       sar  EAX, 16         ; U EAX is the Left X
  948.       mov  __LeftX, EBX    ; V
  949.  
  950.       mov  EDX, __RightX   ; U
  951.       mov  ECX, EDX        ; U
  952.       add  EDX, __RightDx  ; V
  953.       sar  ECX, 16         ; U ECX is the Right X
  954.       mov  __RightX, EDX   ; V
  955.  
  956.       mov  EBX, __DestBuffer  ; U
  957.       mov  EDI, EBX           ; U
  958.       add  EBX, __AddDest     ; V
  959.       mov  __DestBuffer, EBX  ; U
  960.  
  961.       mov  TempLen, ECX
  962.       sub  TempLen, EAX
  963.       inc  TempLen
  964.       mov  EBX, 0
  965.  
  966.         ; Check for Easy reject
  967.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  968.         jg   NextRowTextureFlatHorz
  969.         cmp  ECX, VMinX      ; Right is smaller than MinX
  970.         jl   NextRowTextureFlatHorz
  971.  
  972.         ; Check for Left
  973.         cmp  EAX, VMinX
  974.         jge  CheckRightTextureFlatHorz
  975.           mov  EBX, VMinX
  976.           sub  EBX, EAX
  977.           mov  EAX, VMinX    ; Set Left to MinX
  978.  
  979.         ; Check for Right
  980.         CheckRightTextureFlatHorz :
  981.           cmp  ECX, VMaxX
  982.           jle  StartTextureFlatHorz
  983.           mov  ECX, VMaxX    ; Set Right to MaxX
  984.  
  985.     StartTextureFlatHorz :
  986.       sub  ECX, EAX
  987.       inc  ECX
  988.       add  EDI, EAX
  989.  
  990.       cmp  ECX, 0
  991.       jle  NextRowTextureFlatHorz
  992.  
  993.       mov  EBP, TempLen
  994.       shl  EBP, 2
  995.       add  EBP, __DivTable
  996.       fld  dword ptr [EBP]
  997.  
  998.       mov  EBP, ECX      ; EBP is the loop
  999.  
  1000.       mov  ECX, TempLen
  1001.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  1002.  
  1003.       mov  EAX, __LeftU    
  1004.       mov  EDX, __RightU         
  1005.       sub  EDX, EAX
  1006.       sar  EDX, 8
  1007.       mov  InDeltaDu, EDX
  1008.       fild InDeltaDu      
  1009.       fmul st, st(1)
  1010.       fistp InDeltaDu
  1011.       
  1012.       mov  EAX, __LeftV    
  1013.       mov  EDX, __RightV         
  1014.       sub  EDX, EAX
  1015.       sar  EDX, 8
  1016.       mov  InDeltaDv, EDX
  1017.       fild InDeltaDv      
  1018.       fmul st, st(1)
  1019.       fistp InDeltaDv
  1020.  
  1021.       fstp DummyFloat
  1022.  
  1023.       push ESI
  1024.  
  1025.       mov  EAX, InDeltaDu
  1026.       imul TempLen
  1027.       mov  ECX, __LeftU
  1028.       sar  ECX, 8
  1029.       add  ECX, EAX
  1030.  
  1031.       mov  EAX, InDeltaDv
  1032.       imul TempLen
  1033.       mov  EDX, __LeftV
  1034.       sar  EDX, 8
  1035.       add  EDX, EAX
  1036.  
  1037.       mov  EAX, __LeftI
  1038.       sar  EAX, 8
  1039.       mov  ESI, __ShadeBuffer
  1040.       
  1041.         InLoopClippedTextureFlatHorz :
  1042.           mov  EBX, 0
  1043.           mov  BH, DH
  1044.           mov  BL, CH
  1045.           add  ECX, InDeltaDu
  1046.           add  EBX, __TextureBuffer
  1047.           mov  AL, [EBX]
  1048.           add  EDX, InDeltaDv
  1049.           mov  BL, [ESI+EAX]
  1050.           mov  [EDI], BL
  1051.           inc  EDI
  1052.           dec  EBP
  1053.           jnz  InLoopClippedTextureFlatHorz
  1054.     
  1055.       pop  ESI
  1056.  
  1057.       NextRowTextureFlatHorz : 
  1058.         mov  EAX, __LeftU
  1059.         mov  EBX, __LeftV
  1060.         add  EAX, __LeftDu
  1061.         add  EBX, __LeftDv
  1062.         mov  __LeftU, EAX
  1063.         mov  __LeftV, EBX
  1064.  
  1065.         mov  EAX, __RightU
  1066.         mov  EBX, __RightV
  1067.         add  EAX, __RightDu
  1068.         add  EBX, __RightDv
  1069.         mov  __RightU, EAX
  1070.         mov  __RightV, EBX
  1071.  
  1072.         dec  ESI
  1073.       jnz  LoopOutClippedTextureFlatHorz
  1074.  
  1075.   EndLoopOutTextureFlatHorz :
  1076.  
  1077.   pop  ESI
  1078.   pop  EDI
  1079.   pop  EBP
  1080.   ret
  1081. _DrawTextureFlatHorz_ ENDP
  1082.  
  1083.  
  1084. ; _DrawTextureGrdHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  1085. ;
  1086. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  1087.  
  1088. _DrawTextureGrdHorz_ PROC C
  1089.   push EBP
  1090.   push EDI
  1091.   push ESI  
  1092.   
  1093.   mov  Color, EAX
  1094.  
  1095.   sub  EDX, EBX
  1096.   mov  LoopCount, EDX
  1097.  
  1098.   cmp  EBX, 0
  1099.   je   CheckClippedTextureGrdHorz 
  1100.  
  1101.     mov  EAX, __LeftDx
  1102.     imul  EBX
  1103.     add  __LeftX, EAX
  1104.  
  1105.     mov  EAX, __RightDx
  1106.     imul  EBX
  1107.     add  __RightX, EAX
  1108.  
  1109.     mov  EAX, __LeftDu
  1110.     imul  EBX
  1111.     add  __LeftU, EAX
  1112.  
  1113.     mov  EAX, __RightDu
  1114.     imul  EBX
  1115.     add  __RightU, EAX
  1116.  
  1117.     mov  EAX, __LeftDv
  1118.     imul  EBX
  1119.     add  __LeftV, EAX
  1120.  
  1121.     mov  EAX, __RightDv
  1122.     imul  EBX
  1123.     add  __RightV, EAX
  1124.  
  1125.     mov  EAX, __LeftDI
  1126.     imul  EBX
  1127.     add  __LeftI, EAX
  1128.  
  1129.     mov  EAX, __RightDI
  1130.     imul  EBX
  1131.     add  __RightI, EAX
  1132.  
  1133.     mov  EAX, __AddDest
  1134.     imul  EBX
  1135.     add  __DestBuffer, EAX
  1136.  
  1137.   CheckClippedTextureGrdHorz :
  1138.     cmp  ECX, 0
  1139.     jne  DrawTextureGrdHorzClip
  1140.  
  1141.   DrawTextureGrdHorzNoClip :
  1142.     cld
  1143.     mov  ESI, LoopCount
  1144.     cmp  ESI, 0
  1145.     jle  EndLoopOutTextureGrdHorz
  1146.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1147.     nop          
  1148.  
  1149.     LoopOutTextureGrdHorz :
  1150.       mov  EBX, __LeftX    ; U
  1151.       mov  EAX, EBX        ; U
  1152.       add  EBX, __LeftDx   ; V
  1153.       sar  EAX, 16         ; U EAX is the Left X
  1154.       mov  __LeftX, EBX    ; V
  1155.  
  1156.       mov  EDX, __RightX   ; U
  1157.       mov  ECX, EDX        ; U
  1158.       add  EDX, __RightDx  ; V
  1159.       sar  ECX, 16         ; U ECX is the Right X
  1160.       mov  __RightX, EDX   ; V
  1161.  
  1162.       mov  EBX, __DestBuffer  ; U
  1163.       mov  EDI, EBX           ; U
  1164.       add  EBX, __AddDest     ; V
  1165.       sub  ECX, EAX           ; U
  1166.  
  1167.       mov  __DestBuffer, EBX  ; V
  1168.  
  1169.       add  EDI, EAX           ; U
  1170.       inc  ECX                ; V
  1171.  
  1172.       cmp  ECX, 0
  1173.       jle  NextRowTextureGrdHorzNoClip
  1174.  
  1175.       mov  EBP, ECX
  1176.       shl  EBP, 2
  1177.       add  EBP, __DivTable
  1178.       fld  dword ptr [EBP]
  1179.       
  1180.       mov  EBP, ECX      ; EBP is the loop
  1181.  
  1182.       mov  EAX, __LeftI    ; U
  1183.       mov  EDX, __RightI   ; U      
  1184.       sub  EDX, EAX
  1185.       sar  EDX, 8
  1186.       mov  EAX, EDX
  1187.       sar  EDX, 01Fh
  1188.       idiv ECX
  1189.       mov  InDeltaDI, EAX
  1190.  
  1191.       mov  EAX, __LeftU
  1192.       mov  EDX, __RightU         
  1193.       sub  EDX, EAX
  1194.       sar  EDX, 8
  1195.       mov  InDeltaDu, EDX
  1196.       fild InDeltaDu      
  1197.       fmul st, st(1)
  1198.       fistp InDeltaDu
  1199.       
  1200.       mov  EAX, __LeftV    
  1201.       mov  EDX, __RightV         
  1202.       sub  EDX, EAX
  1203.       sar  EDX, 8
  1204.       mov  InDeltaDv, EDX
  1205.       fild InDeltaDv      
  1206.       fmul st, st(1)
  1207.       fistp InDeltaDv
  1208.  
  1209.       fstp DummyFloat
  1210.  
  1211.       push ESI
  1212.  
  1213.       mov  ECX, __LeftU
  1214.       mov  EDX, __LeftV
  1215.       mov  ESI, __LeftI
  1216.       sar  ECX, 8
  1217.       sar  EDX, 8
  1218.       sar  ESI, 8
  1219.      
  1220.         InLoopTextureGrdHorz :
  1221.           mov  EBX, 0
  1222.           mov  BH, DH
  1223.           mov  BL, CH
  1224.           add  ECX, InDeltaDu
  1225.           add  EBX, __TextureBuffer
  1226.           mov  EAX, ESI
  1227.           mov  AL, [EBX]
  1228.           add  EDX, InDeltaDv
  1229.           add  EAX, __ShadeBuffer
  1230.           mov  BL, [EAX]
  1231.           add  ESI, InDeltaDI
  1232.           mov  [EDI], BL
  1233.           inc  EDI
  1234.           dec  EBP
  1235.           jnz  InLoopTextureGrdHorz
  1236.    
  1237.       pop  ESI
  1238.  
  1239.       NextRowTextureGrdHorzNoClip :
  1240.         mov  EAX, __LeftU
  1241.         mov  EBX, __LeftV
  1242.         add  EAX, __LeftDu
  1243.         add  EBX, __LeftDv
  1244.         mov  __LeftU, EAX
  1245.         mov  __LeftV, EBX
  1246.  
  1247.         mov  EAX, __RightU
  1248.         mov  EBX, __RightV
  1249.         add  EAX, __RightDu
  1250.         add  EBX, __RightDv
  1251.         mov  __RightU, EAX
  1252.         mov  __RightV, EBX
  1253.  
  1254.         mov  EAX, __LeftI
  1255.         mov  EBX, __RightI
  1256.         add  EAX, __LeftDI
  1257.         add  EBX, __RightDI
  1258.         mov  __LeftI, EAX
  1259.         mov  __RightI, EBX
  1260.  
  1261.         dec  ESI
  1262.       jnz  LoopOutTextureGrdHorz
  1263.       jmp  EndLoopOutTextureGrdHorz
  1264.  
  1265.   DrawTextureGrdHorzClip :
  1266.     cld
  1267.     mov  ESI, LoopCount
  1268.     cmp  ESI, 0
  1269.     jle  EndLoopOutTextureGrdHorz
  1270.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1271.     nop          
  1272.  
  1273.     LoopOutClippedTextureGrdHorz :
  1274.       mov  EBX, __LeftX    ; U
  1275.       mov  EAX, EBX        ; U
  1276.       add  EBX, __LeftDx   ; V
  1277.       sar  EAX, 16         ; U EAX is the Left X
  1278.       mov  __LeftX, EBX    ; V
  1279.  
  1280.       mov  EDX, __RightX   ; U
  1281.       mov  ECX, EDX        ; U
  1282.       add  EDX, __RightDx  ; V
  1283.       sar  ECX, 16         ; U ECX is the Right X
  1284.       mov  __RightX, EDX   ; V
  1285.  
  1286.       mov  EBX, __DestBuffer  ; U
  1287.       mov  EDI, EBX           ; U
  1288.       add  EBX, __AddDest     ; V
  1289.       mov  __DestBuffer, EBX  ; U
  1290.  
  1291.       mov  TempLen, ECX
  1292.       sub  TempLen, EAX
  1293.       inc  TempLen
  1294.       mov  EBX, 0
  1295.  
  1296.         ; Check for Easy reject
  1297.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  1298.         jg   NextRowTextureGrdHorz
  1299.         cmp  ECX, VMinX      ; Right is smaller than MinX
  1300.         jl   NextRowTextureGrdHorz
  1301.  
  1302.         ; Check for Left
  1303.         cmp  EAX, VMinX
  1304.         jge  CheckRightTextureGrdHorz
  1305.           mov  EBX, VMinX
  1306.           sub  EBX, EAX
  1307.           mov  EAX, VMinX    ; Set Left to MinX
  1308.  
  1309.         ; Check for Right
  1310.         CheckRightTextureGrdHorz :
  1311.           cmp  ECX, VMaxX
  1312.           jle  StartTextureGrdHorz
  1313.           mov  ECX, VMaxX    ; Set Right to MaxX
  1314.  
  1315.     StartTextureGrdHorz :
  1316.       sub  ECX, EAX
  1317.       inc  ECX
  1318.       add  EDI, EAX
  1319.  
  1320.       cmp  ECX, 0
  1321.       jle  NextRowTextureGrdHorz
  1322.  
  1323.       mov  EBP, TempLen
  1324.       shl  EBP, 2
  1325.       add  EBP, __DivTable
  1326.       fld  dword ptr [EBP]
  1327.  
  1328.       mov  EBP, ECX      ; EBP is the loop
  1329.  
  1330.       mov  ECX, TempLen
  1331.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  1332.  
  1333.       mov  EAX, __LeftI    ; U
  1334.       mov  EDX, __RightI   ; U      
  1335.       sub  EDX, EAX
  1336.       sar  EDX, 8
  1337.       mov  EAX, EDX
  1338.       sar  EDX, 01Fh
  1339.       idiv ECX
  1340.       mov  InDeltaDI, EAX
  1341.  
  1342.       mov  EAX, __LeftU    
  1343.       mov  EDX, __RightU         
  1344.       sub  EDX, EAX
  1345.       sar  EDX, 8
  1346.       mov  InDeltaDu, EDX
  1347.       fild InDeltaDu      
  1348.       fmul st, st(1)
  1349.       fistp InDeltaDu
  1350.       
  1351.       mov  EAX, __LeftV    
  1352.       mov  EDX, __RightV         
  1353.       sub  EDX, EAX
  1354.       sar  EDX, 8
  1355.       mov  InDeltaDv, EDX
  1356.       fild InDeltaDv      
  1357.       fmul st, st(1)
  1358.       fistp InDeltaDv
  1359.  
  1360.       fstp DummyFloat
  1361.  
  1362.       push ESI
  1363.  
  1364.       mov  EAX, InDeltaDu
  1365.       imul TempLen
  1366.       mov  ECX, __LeftU
  1367.       sar  ECX, 8
  1368.       add  ECX, EAX
  1369.  
  1370.       mov  EAX, InDeltaDI
  1371.       imul TempLen
  1372.       mov  ESI, __LeftI
  1373.       sar  ESI, 8
  1374.       add  ESI, EAX
  1375.       
  1376.       mov  EAX, InDeltaDv
  1377.       imul TempLen
  1378.       mov  EDX, __LeftV
  1379.       sar  EDX, 8
  1380.       add  EDX, EAX
  1381.  
  1382.         InLoopClippedTextureGrdHorz :
  1383.           mov  EBX, 0
  1384.           mov  BH, DH
  1385.           mov  BL, CH
  1386.           add  ECX, InDeltaDu
  1387.           add  EBX, __TextureBuffer
  1388.           mov  EAX, ESI
  1389.           mov  AL, [EBX]
  1390.           add  EDX, InDeltaDv
  1391.           add  EAX, __ShadeBuffer
  1392.           mov  BL, [EAX]
  1393.           add  ESI, InDeltaDI
  1394.           mov  [EDI], BL
  1395.           inc  EDI
  1396.           dec  EBP
  1397.           jnz  InLoopClippedTextureGrdHorz
  1398.     
  1399.       pop  ESI
  1400.  
  1401.       NextRowTextureGrdHorz : 
  1402.         mov  EAX, __LeftU
  1403.         mov  EBX, __LeftV
  1404.         add  EAX, __LeftDu
  1405.         add  EBX, __LeftDv
  1406.         mov  __LeftU, EAX
  1407.         mov  __LeftV, EBX
  1408.    
  1409.         mov  EAX, __RightU
  1410.         mov  EBX, __RightV
  1411.         add  EAX, __RightDu
  1412.         add  EBX, __RightDv
  1413.         mov  __RightU, EAX
  1414.         mov  __RightV, EBX
  1415.  
  1416.         mov  EAX, __LeftI
  1417.         mov  EBX, __RightI
  1418.         add  EAX, __LeftDI
  1419.         add  EBX, __RightDI
  1420.         mov  __LeftI, EAX
  1421.         mov  __RightI, EBX
  1422.  
  1423.         dec  ESI
  1424.       jnz  LoopOutClippedTextureGrdHorz
  1425.  
  1426.   EndLoopOutTextureGrdHorz :
  1427.  
  1428.   pop  ESI
  1429.   pop  EDI
  1430.   pop  EBP
  1431.   ret
  1432. _DrawTextureGrdHorz_ ENDP
  1433.  
  1434. ;***************************************************
  1435. ;
  1436. ;  Transparent Routines
  1437. ;
  1438. ;***************************************************
  1439.  
  1440. ; _DrawSolidNoTransHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  1441. ;
  1442. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  1443.  
  1444. _DrawSolidNoTransHorz_ PROC C
  1445.   push EBP
  1446.   push EDI
  1447.   push ESI  
  1448.   
  1449.   mov  Color, EAX
  1450.  
  1451.   sub  EDX, EBX
  1452.   mov  LoopCount, EDX
  1453.  
  1454.   cmp  EBX, 0
  1455.   je   CheckClippedSolidNoTransHorz 
  1456.  
  1457.     mov  EAX, __LeftDx
  1458.     imul  EBX
  1459.     add  __LeftX, EAX
  1460.  
  1461.     mov  EAX, __RightDx
  1462.     imul  EBX
  1463.     add  __RightX, EAX
  1464.  
  1465.     mov  EAX, __AddDest
  1466.     imul  EBX
  1467.     add  __DestBuffer, EAX
  1468.  
  1469.   CheckClippedSolidNoTransHorz :
  1470.     cmp  ECX, 0
  1471.     jne  DrawSolidNoTransHorzClip
  1472.  
  1473.   DrawSolidNoTransHorzNoClip :
  1474.     cld
  1475.     mov  ESI, LoopCount
  1476.     cmp  ESI, 0
  1477.     jle  EndLoopOutSolidNoTransHorz
  1478.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1479.     nop          
  1480.  
  1481.     LoopOutSolidNoTransHorz :
  1482.       mov  EBX, __LeftX    ; U
  1483.       mov  EAX, EBX        ; U
  1484.       add  EBX, __LeftDx   ; V
  1485.       sar  EAX, 16         ; U EAX is the Left X
  1486.       mov  __LeftX, EBX    ; V
  1487.  
  1488.       mov  EDX, __RightX   ; U
  1489.       mov  ECX, EDX        ; U
  1490.       add  EDX, __RightDx  ; V
  1491.       sar  ECX, 16         ; U ECX is the Right X
  1492.       mov  __RightX, EDX   ; V
  1493.  
  1494.       mov  EBX, __DestBuffer  ; U
  1495.       mov  EDI, EBX           ; U
  1496.       add  EBX, __AddDest     ; V
  1497.       mov  __DestBuffer, EBX  ; U
  1498.  
  1499.       sub  ECX, EAX           ; V
  1500.       add  EDI, EAX           ; U
  1501.       inc  ECX                ; V
  1502.       cmp  ECX, 0
  1503.       jle  NextRowSolidNoTransHorzNoClip 
  1504.  
  1505.       mov  EAX, Color         
  1506.       and  EAX, 0000FF00h
  1507.       mov  EBP, __BlendBuffer
  1508.       
  1509.         InLoopSolidNoTransHorz :
  1510.           mov  AL, [EDI]
  1511.           mov  AL, [EBP+EAX]
  1512.           mov  [EDI], AL
  1513.           inc  EDI
  1514.           loop InLoopSolidNoTransHorz
  1515.           
  1516.       NextRowSolidNoTransHorzNoClip :
  1517.         dec  ESI
  1518.         jnz  LoopOutSolidNoTransHorz
  1519.       jmp  EndLoopOutSolidNoTransHorz
  1520.  
  1521.   DrawSolidNoTransHorzClip :
  1522.     cld
  1523.     mov  ESI, LoopCount
  1524.     cmp  ESI, 0
  1525.     jle  EndLoopOutSolidNoTransHorz
  1526.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1527.     nop          
  1528.  
  1529.     LoopOutClippedSolidNoTransHorz :
  1530.       mov  EBX, __LeftX    ; U
  1531.       mov  EAX, EBX        ; U
  1532.       add  EBX, __LeftDx   ; V
  1533.       sar  EAX, 16         ; U EAX is the Left X
  1534.       mov  __LeftX, EBX    ; V
  1535.  
  1536.       mov  EDX, __RightX   ; U
  1537.       mov  ECX, EDX        ; U
  1538.       add  EDX, __RightDx  ; V
  1539.       sar  ECX, 16         ; U ECX is the Right X
  1540.       mov  __RightX, EDX   ; V
  1541.  
  1542.       mov  EBX, __DestBuffer  ; U
  1543.       mov  EDI, EBX           ; U
  1544.       add  EBX, __AddDest     ; V
  1545.       mov  __DestBuffer, EBX  ; U
  1546.  
  1547.         ; Check for Easy reject
  1548.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  1549.         jg   NextRowSolidNoTransHorz
  1550.         cmp  ECX, VMinX      ; Right is smaller than MinX
  1551.         jl   NextRowSolidNoTransHorz
  1552.  
  1553.         ; Check for Left
  1554.         cmp  EAX, VMinX
  1555.         jge  CheckRightSolidNoTransHorz
  1556.           mov  EAX, VMinX    ; Set Left to MinX
  1557.  
  1558.         ; Check for Right
  1559.       CheckRightSolidNoTransHorz :
  1560.         cmp  ECX, VMaxX
  1561.         jle  StartSolidNoTransHorz
  1562.         mov  ECX, VMaxX    ; Set Right to MaxX
  1563.  
  1564.     StartSolidNoTransHorz :
  1565.       sub  ECX, EAX
  1566.       inc  ECX
  1567.       cmp  ECX, 0
  1568.       jle  NextRowSolidNoTransHorz
  1569.  
  1570.       add  EDI, EAX           
  1571.  
  1572.       mov  EAX, Color         
  1573.       and  EAX, 0000FF00h
  1574.       mov  EBP, __BlendBuffer
  1575.       
  1576.         InLoopClippedSolidNoTransHorz :
  1577.           mov  AL, [EDI]
  1578.           mov  AL, [EBP+EAX]
  1579.           mov  [EDI], AL
  1580.           inc  EDI
  1581.           loop InLoopClippedSolidNoTransHorz
  1582.           
  1583.       NextRowSolidNoTransHorz : 
  1584.         dec  ESI
  1585.       jnz  LoopOutClippedSolidNoTransHorz
  1586.  
  1587.   EndLoopOutSolidNoTransHorz :
  1588.  
  1589.   pop  ESI
  1590.   pop  EDI
  1591.   pop  EBP
  1592.   ret
  1593. _DrawSolidNoTransHorz_ ENDP
  1594.  
  1595.  
  1596. ; _DrawSolidGrdTransHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  1597. ;
  1598. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  1599.  
  1600. _DrawSolidGrdTransHorz_ PROC C
  1601.   push EBP
  1602.   push EDI
  1603.   push ESI  
  1604.   
  1605.   mov  Color, EAX
  1606.  
  1607.   sub  EDX, EBX
  1608.   mov  LoopCount, EDX
  1609.  
  1610.   cmp  EBX, 0
  1611.   je   CheckClippedSolidGrdTransHorz 
  1612.  
  1613.     mov  EAX, __LeftDx
  1614.     imul  EBX
  1615.     add  __LeftX, EAX
  1616.  
  1617.     mov  EAX, __RightDx
  1618.     imul  EBX
  1619.     add  __RightX, EAX
  1620.  
  1621.     mov  EAX, __LeftDI
  1622.     imul  EBX
  1623.     add  __LeftI, EAX
  1624.  
  1625.     mov  EAX, __RightDI
  1626.     imul  EBX
  1627.     add  __RightI, EAX
  1628.  
  1629.     mov  EAX, __AddDest
  1630.     imul  EBX
  1631.     add  __DestBuffer, EAX
  1632.  
  1633.   CheckClippedSolidGrdTransHorz :
  1634.     cmp  ECX, 0
  1635.     jne  DrawSolidGrdTransHorzClip
  1636.  
  1637.   DrawSolidGrdTransHorzNoClip :
  1638.     cld
  1639.     mov  ESI, LoopCount
  1640.     cmp  ESI, 0
  1641.     jle  EndLoopOutSolidGrdTransHorz
  1642.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1643.     nop          
  1644.  
  1645.     LoopOutSolidGrdTransHorz :
  1646.       mov  EBX, __LeftX    ; U
  1647.       mov  EAX, EBX        ; U
  1648.       add  EBX, __LeftDx   ; V
  1649.       sar  EAX, 16         ; U EAX is the Left X
  1650.       mov  __LeftX, EBX    ; V
  1651.  
  1652.       mov  EDX, __RightX   ; U
  1653.       mov  ECX, EDX        ; U
  1654.       add  EDX, __RightDx  ; V
  1655.       sar  ECX, 16         ; U ECX is the Right X
  1656.       mov  __RightX, EDX   ; V
  1657.  
  1658.       mov  EBX, __DestBuffer  ; U
  1659.       mov  EDI, EBX           ; U
  1660.       add  EBX, __AddDest     ; V
  1661.       sub  ECX, EAX           ; U
  1662.  
  1663.       mov  __DestBuffer, EBX  ; V
  1664.  
  1665.       add  EDI, EAX           ; U
  1666.       inc  ECX                ; V
  1667.       
  1668.       mov  EBX, __LeftI    ; U
  1669.       mov  EAX, EBX        ; U     EAX is the Left I
  1670.       add  EBX, __LeftDI   ; V
  1671.       mov  __LeftI, EBX    ; V
  1672.       
  1673.       mov  EBX, __RightI   ; U
  1674.       mov  EDX, EBX        ; U     EDX is the Right I
  1675.       add  EBX, __RightDI  ; V
  1676.       mov  __RightI, EBX   ; V
  1677.       
  1678.       cmp  ECX, 0
  1679.       jle  NextRowSolidGrdTransHorzNoClip
  1680.  
  1681.       mov  EBX, EAX        ; EBX is the Left I
  1682.       sub  EDX, EAX
  1683.       mov  EAX, EDX
  1684.       sar  EDX, 01Fh
  1685.       idiv ECX
  1686.       mov  InDeltaDI, EAX
  1687.  
  1688.       mov  EBP, EBX
  1689.       mov  EAX, Color        
  1690.       mov  EDX, __BlendBuffer 
  1691.       push ESI
  1692.       mov  ESI, __ShadeBuffer
  1693.       
  1694.         InLoopSolidGrdTransHorz :
  1695.           mov  EBX, EBP
  1696.           shr  EBX, 8
  1697.           mov  BL, AL
  1698.           add  EBP, InDeltaDI
  1699.           mov  BH, [EBX+ESI]
  1700.           mov  BL, [EDI]
  1701.           mov  AH, [EDX+EBX]
  1702.           mov  [EDI], AH
  1703.           inc  EDI
  1704.           loop InLoopSolidGrdTransHorz
  1705.  
  1706.       pop  ESI
  1707.  
  1708.       NextRowSolidGrdTransHorzNoClip :
  1709.         dec  ESI
  1710.         jnz  LoopOutSolidGrdTransHorz
  1711.       jmp  EndLoopOutSolidGrdTransHorz
  1712.  
  1713.   DrawSolidGrdTransHorzClip :
  1714.     cld
  1715.     mov  ESI, LoopCount
  1716.     cmp  ESI, 0
  1717.     jle  EndLoopOutSolidGrdTransHorz
  1718.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1719.     nop          
  1720.  
  1721.     LoopOutClippedSolidGrdTransHorz :
  1722.       mov  EBX, __LeftX    ; U
  1723.       mov  EAX, EBX        ; U
  1724.       add  EBX, __LeftDx   ; V
  1725.       sar  EAX, 16         ; U EAX is the Left X
  1726.       mov  __LeftX, EBX    ; V
  1727.  
  1728.       mov  EDX, __RightX   ; U
  1729.       mov  ECX, EDX        ; U
  1730.       add  EDX, __RightDx  ; V
  1731.       sar  ECX, 16         ; U ECX is the Right X
  1732.       mov  __RightX, EDX   ; V
  1733.  
  1734.       mov  EBX, __DestBuffer  ; U
  1735.       mov  EDI, EBX           ; U
  1736.       add  EBX, __AddDest     ; V
  1737.       mov  __DestBuffer, EBX  ; U
  1738.  
  1739.       mov  TempLen, ECX
  1740.       sub  TempLen, EAX
  1741.       inc  TempLen
  1742.       mov  EBX, 0
  1743.  
  1744.         ; Check for Easy reject
  1745.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  1746.         jg   NextRowSolidGrdTransHorz
  1747.         cmp  ECX, VMinX      ; Right is smaller than MinX
  1748.         jl   NextRowSolidGrdTransHorz
  1749.  
  1750.         ; Check for Left
  1751.         cmp  EAX, VMinX
  1752.         jge  CheckRightSolidGrdTransHorz
  1753.           mov  EBX, VMinX
  1754.           sub  EBX, EAX
  1755.           mov  EAX, VMinX    ; Set Left to MinX
  1756.  
  1757.         ; Check for Right
  1758.         CheckRightSolidGrdTransHorz :
  1759.           cmp  ECX, VMaxX
  1760.           jle  StartSolidGrdTransHorz
  1761.           mov  ECX, VMaxX    ; Set Right to MaxX
  1762.  
  1763.     StartSolidGrdTransHorz :  ; Clipped
  1764.       sub  ECX, EAX
  1765.       inc  ECX
  1766.  
  1767.       add  EDI, EAX
  1768.  
  1769.       mov  EBP, TempLen    ; EBP is the loop count before clipped
  1770.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  1771.  
  1772.       mov  EBX, __LeftI    ; U
  1773.       mov  EAX, EBX        ; U   EAX is the Left I
  1774.       add  EBX, __LeftDI   ; V
  1775.       mov  __LeftI, EBX    ; V
  1776.       
  1777.       mov  EBX, __RightI   ; U
  1778.       mov  EDX, EBX        ; U   EDX is the Right I
  1779.       add  EBX, __RightDI  ; V
  1780.       mov  __RightI, EBX   ; V
  1781.             
  1782.       cmp  ECX, 0
  1783.       jle  NextRowSolidGrdTransHorz
  1784.  
  1785.       mov  EBX, EAX        ; EAX is Left I
  1786.       sub  EDX, EAX
  1787.       mov  EAX, EDX
  1788.       sar  EDX, 01Fh
  1789.       idiv EBP
  1790.       mov  InDeltaDI, EAX
  1791.  
  1792.       ; Add Delta for Skipped pixel
  1793.       mov  EBP, EBX
  1794.       mov  EAX, InDeltaDI
  1795.       imul TempLen 
  1796.       add  EBP, EAX
  1797.  
  1798.       mov  EAX, Color        
  1799.       mov  EDX, __BlendBuffer
  1800.       push ESI
  1801.       mov  ESI, __ShadeBuffer
  1802.       
  1803.         InLoopClippedSolidGrdTransHorz :
  1804.           mov  EBX, EBP
  1805.           shr  EBX, 8
  1806.           mov  BL, AL
  1807.           add  EBP, InDeltaDI
  1808.           mov  BH, [EBX+ESI]
  1809.           mov  BL, [EDI]
  1810.           mov  AH, [EDX+EBX]
  1811.           mov  [EDI], AH
  1812.           inc  EDI
  1813.           loop InLoopClippedSolidGrdTransHorz
  1814.     
  1815.       pop  ESI
  1816.       NextRowSolidGrdTransHorz : 
  1817.         dec  ESI
  1818.       jnz  LoopOutClippedSolidGrdTransHorz
  1819.  
  1820.   EndLoopOutSolidGrdTransHorz :
  1821.  
  1822.   pop  ESI
  1823.   pop  EDI
  1824.   pop  EBP
  1825.   ret
  1826. _DrawSolidGrdTransHorz_ ENDP
  1827.  
  1828.  
  1829. ; _DrawTextureNoTransHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  1830. ;
  1831. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  1832.  
  1833. _DrawTextureNoTransHorz_ PROC C
  1834.   push EBP
  1835.   push EDI
  1836.   push ESI  
  1837.   
  1838.   sub  EDX, EBX
  1839.   mov  LoopCount, EDX
  1840.  
  1841.   cmp  EBX, 0
  1842.   je   CheckClippedTextureNoTransHorz 
  1843.  
  1844.     mov  EAX, __LeftDx
  1845.     imul  EBX
  1846.     add  __LeftX, EAX
  1847.  
  1848.     mov  EAX, __RightDx
  1849.     imul  EBX
  1850.     add  __RightX, EAX
  1851.  
  1852.     mov  EAX, __LeftDu
  1853.     imul  EBX
  1854.     add  __LeftU, EAX
  1855.  
  1856.     mov  EAX, __RightDu
  1857.     imul  EBX
  1858.     add  __RightU, EAX
  1859.  
  1860.     mov  EAX, __LeftDv
  1861.     imul  EBX
  1862.     add  __LeftV, EAX
  1863.  
  1864.     mov  EAX, __RightDv
  1865.     imul  EBX
  1866.     add  __RightV, EAX
  1867.  
  1868.     mov  EAX, __AddDest
  1869.     imul  EBX
  1870.     add  __DestBuffer, EAX
  1871.  
  1872.   CheckClippedTextureNoTransHorz :
  1873.     cmp  ECX, 0
  1874.     jne  DrawTextureNoTransHorzClip
  1875.  
  1876.   DrawTextureNoTransHorzNoClip :
  1877.     cld
  1878.     mov  ESI, LoopCount
  1879.     cmp  ESI, 0
  1880.     jle  EndLoopOutTextureNoTransHorz
  1881.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1882.     nop          
  1883.  
  1884.     LoopOutTextureNoTransHorz :
  1885.       mov  EBX, __LeftX    ; U
  1886.       mov  EAX, EBX        ; U
  1887.       add  EBX, __LeftDx   ; V
  1888.       sar  EAX, 16         ; U EAX is the Left X
  1889.       mov  __LeftX, EBX    ; V
  1890.  
  1891.       mov  EDX, __RightX   ; U
  1892.       mov  ECX, EDX        ; U
  1893.       add  EDX, __RightDx  ; V
  1894.       sar  ECX, 16         ; U ECX is the Right X
  1895.       mov  __RightX, EDX   ; V
  1896.  
  1897.       mov  EBX, __DestBuffer  ; U
  1898.       mov  EDI, EBX           ; U
  1899.       add  EBX, __AddDest     ; V
  1900.       mov  __DestBuffer, EBX  ; U
  1901.  
  1902.       sub  ECX, EAX           ; V
  1903.       add  EDI, EAX           ; U
  1904.       inc  ECX                ; V
  1905.             
  1906.       cmp  ECX, 0
  1907.       jle  NextRowTextureNoTransHorzNoClip
  1908.  
  1909.       mov  EBP, ECX
  1910.       shl  EBP, 2
  1911.       add  EBP, __DivTable
  1912.       fld  dword ptr [EBP] 
  1913.       
  1914.       mov  EBP, ECX      ; EBP is the loop
  1915.  
  1916.       mov  EAX, __LeftU    
  1917.       mov  EDX, __RightU         
  1918.       sub  EDX, EAX
  1919.       sar  EDX, 8
  1920.       mov  InDeltaDu, EDX
  1921.       fild InDeltaDu      
  1922.       fmul st, st(1)
  1923.       fistp InDeltaDu
  1924.       
  1925.       mov  EAX, __LeftV    
  1926.       mov  EDX, __RightV         
  1927.       sub  EDX, EAX
  1928.       sar  EDX, 8
  1929.       mov  InDeltaDv, EDX
  1930.       fild InDeltaDv      
  1931.       fmul st, st(1)
  1932.       fistp InDeltaDv
  1933.  
  1934.       fstp DummyFloat
  1935.  
  1936.       push ESI
  1937.  
  1938.       mov  ECX, __LeftU
  1939.       sar  ECX, 8
  1940.       mov  EDX, __LeftV
  1941.       sar  EDX, 8
  1942.       mov  ESI, __TextureBuffer
  1943.       mov  EBX, 0
  1944.       mov  EAX, 0
  1945.       mov  InLoopCount, BP
  1946.       mov  EBP, __BlendBuffer
  1947.  
  1948.         InLoopTextureNoTransHorz :
  1949.           mov  BH, DH
  1950.           mov  BL, CH
  1951.           add  ECX, InDeltaDu
  1952.           mov  AL, [EDI]
  1953.           mov  AH, [EBX+ESI]
  1954.           add  EDX, InDeltaDv
  1955.           mov  AL, [EBP+EAX]
  1956.           mov  [EDI], AL
  1957.           inc  EDI
  1958.           dec  InLoopCount
  1959.           jnz  InLoopTextureNoTransHorz
  1960.  
  1961.       pop  ESI
  1962.  
  1963.       NextRowTextureNoTransHorzNoClip :
  1964.  
  1965.       mov  EAX, __LeftU
  1966.       mov  EBX, __LeftV
  1967.       add  EAX, __LeftDu
  1968.       add  EBX, __LeftDv
  1969.       mov  __LeftU, EAX
  1970.       mov  __LeftV, EBX
  1971.  
  1972.       mov  EAX, __RightU
  1973.       mov  EBX, __RightV
  1974.       add  EAX, __RightDu
  1975.       add  EBX, __RightDv
  1976.       mov  __RightU, EAX
  1977.       mov  __RightV, EBX
  1978.  
  1979.       dec  ESI
  1980.       jnz  LoopOutTextureNoTransHorz
  1981.       jmp  EndLoopOutTextureNoTransHorz
  1982.  
  1983.   DrawTextureNoTransHorzClip :
  1984.     cld
  1985.     mov  ESI, LoopCount
  1986.     cmp  ESI, 0
  1987.     jle  EndLoopOutTextureNoTransHorz
  1988.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  1989.     nop          
  1990.  
  1991.     LoopOutClippedTextureNoTransHorz :
  1992.       mov  EBX, __LeftX    ; U
  1993.       mov  EAX, EBX        ; U
  1994.       add  EBX, __LeftDx   ; V
  1995.       sar  EAX, 16         ; U EAX is the Left X
  1996.       mov  __LeftX, EBX    ; V
  1997.  
  1998.       mov  EDX, __RightX   ; U
  1999.       mov  ECX, EDX        ; U
  2000.       add  EDX, __RightDx  ; V
  2001.       sar  ECX, 16         ; U ECX is the Right X
  2002.       mov  __RightX, EDX   ; V
  2003.  
  2004.       mov  EBX, __DestBuffer  ; U
  2005.       mov  EDI, EBX           ; U
  2006.       add  EBX, __AddDest     ; V
  2007.       mov  __DestBuffer, EBX  ; U
  2008.  
  2009.       mov  TempLen, ECX
  2010.       sub  TempLen, EAX
  2011.       inc  TempLen
  2012.       mov  EBX, 0
  2013.  
  2014.         ; Check for Easy reject
  2015.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  2016.         jg   NextRowTextureNoTransHorz
  2017.         cmp  ECX, VMinX      ; Right is smaller than MinX
  2018.         jl   NextRowTextureNoTransHorz
  2019.  
  2020.         ; Check for Left
  2021.         cmp  EAX, VMinX
  2022.         jge  CheckRightTextureNoTransHorz
  2023.           mov  EBX, VMinX
  2024.           sub  EBX, EAX
  2025.           mov  EAX, VMinX    ; Set Left to MinX
  2026.  
  2027.         ; Check for Right
  2028.       CheckRightTextureNoTransHorz :
  2029.         cmp  ECX, VMaxX
  2030.         jle  StartTextureNoTransHorz
  2031.         mov  ECX, VMaxX    ; Set Right to MaxX
  2032.  
  2033.     StartTextureNoTransHorz :
  2034.       sub  ECX, EAX
  2035.       inc  ECX
  2036.  
  2037.       cmp  ECX, 0
  2038.       jle  NextRowTextureNoTransHorz
  2039.  
  2040.       add  EDI, EAX
  2041.  
  2042.       mov  EBP, TempLen
  2043.       shl  EBP, 2
  2044.       add  EBP, __DivTable
  2045.       fld  dword ptr [EBP]
  2046.       
  2047.       mov  EBP, ECX      ; EBP is the loop
  2048.       mov  TempLen, EBX
  2049.  
  2050.       mov  EAX, __LeftU
  2051.       mov  EDX, __RightU         
  2052.       sub  EDX, EAX
  2053.       sar  EDX, 8
  2054.       mov  InDeltaDu, EDX
  2055.       fild InDeltaDu      
  2056.       fmul st, st(1)
  2057.       fistp InDeltaDu
  2058.       
  2059.       mov  EAX, __LeftV    
  2060.       mov  EDX, __RightV         
  2061.       sub  EDX, EAX
  2062.       sar  EDX, 8
  2063.       mov  InDeltaDv, EDX
  2064.       fild InDeltaDv      
  2065.       fmul st, st(1)
  2066.       fistp InDeltaDv
  2067.  
  2068.       fstp  DummyFloat
  2069.  
  2070.       push ESI
  2071.  
  2072.       mov  EAX, InDeltaDu
  2073.       imul TempLen
  2074.       mov  ECX, __LeftU
  2075.       sar  ECX, 8
  2076.       add  ECX, EAX
  2077.  
  2078.       mov  EAX, InDeltaDv
  2079.       imul TempLen
  2080.       mov  EDX, __LeftV
  2081.       sar  EDX, 8
  2082.       add  EDX, EAX
  2083.  
  2084.       mov  ESI, __TextureBuffer
  2085.       mov  EBX, 0
  2086.       mov  EAX, 0
  2087.       mov  InLoopCount, BP
  2088.       mov  EBP, __BlendBuffer
  2089.  
  2090.         InLoopClippedTextureNoTransHorz :
  2091.           mov  BH, DH
  2092.           mov  BL, CH
  2093.           add  ECX, InDeltaDu
  2094.           mov  AL, [EDI]
  2095.           mov  AH, [EBX+ESI]
  2096.           add  EDX, InDeltaDv
  2097.           mov  AL, [EBP+EAX]
  2098.           mov  [EDI], AL
  2099.           inc  EDI
  2100.           dec  InLoopCount
  2101.           jnz  InLoopClippedTextureNoTransHorz
  2102.  
  2103.       pop  ESI
  2104.  
  2105.       NextRowTextureNoTransHorz : 
  2106.         mov  EAX, __LeftU
  2107.         mov  EBX, __LeftV
  2108.         add  EAX, __LeftDu
  2109.         add  EBX, __LeftDv
  2110.         mov  __LeftU, EAX
  2111.         mov  __LeftV, EBX
  2112.  
  2113.         mov  EAX, __RightU
  2114.         mov  EBX, __RightV
  2115.         add  EAX, __RightDu
  2116.         add  EBX, __RightDv
  2117.         mov  __RightU, EAX
  2118.         mov  __RightV, EBX
  2119.  
  2120.         dec  ESI
  2121.       jnz  LoopOutClippedTextureNoTransHorz
  2122.  
  2123.   EndLoopOutTextureNoTransHorz :
  2124.  
  2125.   pop  ESI
  2126.   pop  EDI
  2127.   pop  EBP
  2128.   ret
  2129. _DrawTextureNoTransHorz_ ENDP
  2130.  
  2131.  
  2132. ; _DrawTextureFlatTransHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  2133. ;
  2134. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  2135.  
  2136. _DrawTextureFlatTransHorz_ PROC C
  2137.   push EBP
  2138.   push EDI
  2139.   push ESI  
  2140.   
  2141.   sub  EDX, EBX
  2142.   mov  LoopCount, EDX
  2143.  
  2144.   cmp  EBX, 0
  2145.   je   CheckClippedTextureFlatTransHorz 
  2146.  
  2147.     mov  EAX, __LeftDx
  2148.     imul  EBX
  2149.     add  __LeftX, EAX
  2150.  
  2151.     mov  EAX, __RightDx
  2152.     imul  EBX
  2153.     add  __RightX, EAX
  2154.  
  2155.     mov  EAX, __LeftDu
  2156.     imul  EBX
  2157.     add  __LeftU, EAX
  2158.  
  2159.     mov  EAX, __RightDu
  2160.     imul  EBX
  2161.     add  __RightU, EAX
  2162.  
  2163.     mov  EAX, __LeftDv
  2164.     imul  EBX
  2165.     add  __LeftV, EAX
  2166.  
  2167.     mov  EAX, __RightDv
  2168.     imul  EBX
  2169.     add  __RightV, EAX
  2170.  
  2171.     mov  EAX, __AddDest
  2172.     imul  EBX
  2173.     add  __DestBuffer, EAX
  2174.  
  2175.   CheckClippedTextureFlatTransHorz :
  2176.     cmp  ECX, 0
  2177.     jne  DrawTextureFlatTransHorzClip
  2178.  
  2179.   DrawTextureFlatTransHorzNoClip :
  2180.     cld
  2181.     mov  ESI, LoopCount
  2182.     cmp  ESI, 0
  2183.     jle  EndLoopOutTextureFlatTransHorz
  2184.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2185.     nop          
  2186.  
  2187.     LoopOutTextureFlatTransHorz :
  2188.       mov  EBX, __LeftX    ; U
  2189.       mov  EAX, EBX        ; U
  2190.       add  EBX, __LeftDx   ; V
  2191.       sar  EAX, 16         ; U EAX is the Left X
  2192.       mov  __LeftX, EBX    ; V
  2193.  
  2194.       mov  EDX, __RightX   ; U
  2195.       mov  ECX, EDX        ; U
  2196.       add  EDX, __RightDx  ; V
  2197.       sar  ECX, 16         ; U ECX is the Right X
  2198.       mov  __RightX, EDX   ; V
  2199.  
  2200.       mov  EBX, __DestBuffer  ; U
  2201.       mov  EDI, EBX           ; U
  2202.       add  EBX, __AddDest     ; V
  2203.       sub  ECX, EAX           ; U
  2204.  
  2205.       mov  __DestBuffer, EBX  ; V
  2206.  
  2207.       add  EDI, EAX           ; U
  2208.       inc  ECX                ; V
  2209.  
  2210.       cmp  ECX, 0
  2211.       jle  NextRowTextureFlatTransHorzNoClip
  2212.  
  2213.       mov  EBP, ECX
  2214.       shl  EBP, 2
  2215.       add  EBP, __DivTable
  2216.       fld  dword ptr [EBP]
  2217.       
  2218.       mov  EBP, ECX      ; EBP is the loop
  2219.  
  2220.       mov  EAX, __LeftU    
  2221.       mov  EDX, __RightU         
  2222.       sub  EDX, EAX
  2223.       sar  EDX, 8
  2224.       mov  InDeltaDu, EDX
  2225.       fild InDeltaDu      
  2226.       fmul st, st(1)
  2227.       fistp InDeltaDu
  2228.       
  2229.       mov  EAX, __LeftV    
  2230.       mov  EDX, __RightV         
  2231.       sub  EDX, EAX
  2232.       sar  EDX, 8
  2233.       mov  InDeltaDv, EDX
  2234.       fild InDeltaDv      
  2235.       fmul st, st(1)
  2236.       fistp InDeltaDv
  2237.  
  2238.       fstp DummyFloat
  2239.  
  2240.       push ESI
  2241.  
  2242.       mov  ECX, __LeftU
  2243.       mov  EDX, __LeftV
  2244.       sar  ECX, 8
  2245.       sar  EDX, 8
  2246.  
  2247.       mov  EAX, __LeftI
  2248.       sar  EAX, 8
  2249.       mov  ESI, __ShadeBuffer
  2250.       mov  InLoopCount, BP
  2251.       mov  EBP, __BlendBuffer
  2252.       
  2253.         InLoopTextureFlatTransHorz :
  2254.           mov  EBX, 0
  2255.           mov  BH, DH
  2256.           mov  BL, CH
  2257.           add  ECX, InDeltaDu
  2258.           add  EBX, __TextureBuffer
  2259.           mov  AL, [EBX]
  2260.           add  EDX, InDeltaDv
  2261.           mov  BL, [EDI]
  2262.           mov  BH, [ESI+EAX]
  2263.           and  EBX, 0FFFFh
  2264.           mov  AL, [EBP+EBX]
  2265.           mov  [EDI], AL
  2266.           inc  EDI
  2267.           dec  InLoopCount
  2268.           jnz  InLoopTextureFlatTransHorz
  2269.     
  2270.       pop  ESI
  2271.  
  2272.       NextRowTextureFlatTransHorzNoClip : 
  2273.         mov  EAX, __LeftU
  2274.         mov  EBX, __LeftV
  2275.         add  EAX, __LeftDu
  2276.         add  EBX, __LeftDv
  2277.         mov  __LeftU, EAX
  2278.         mov  __LeftV, EBX
  2279.  
  2280.         mov  EAX, __RightU
  2281.         mov  EBX, __RightV
  2282.         add  EAX, __RightDu
  2283.         add  EBX, __RightDv
  2284.         mov  __RightU, EAX
  2285.         mov  __RightV, EBX
  2286.  
  2287.         dec  ESI
  2288.       jnz  LoopOutTextureFlatTransHorz
  2289.       jmp  EndLoopOutTextureFlatTransHorz
  2290.  
  2291.   DrawTextureFlatTransHorzClip :
  2292.     cld
  2293.     mov  ESI, LoopCount
  2294.     cmp  ESI, 0
  2295.     jle  EndLoopOutTextureFlatTransHorz
  2296.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2297.     nop          
  2298.  
  2299.     LoopOutClippedTextureFlatTransHorz :
  2300.       mov  EBX, __LeftX    ; U
  2301.       mov  EAX, EBX        ; U
  2302.       add  EBX, __LeftDx   ; V
  2303.       sar  EAX, 16         ; U EAX is the Left X
  2304.       mov  __LeftX, EBX    ; V
  2305.  
  2306.       mov  EDX, __RightX   ; U
  2307.       mov  ECX, EDX        ; U
  2308.       add  EDX, __RightDx  ; V
  2309.       sar  ECX, 16         ; U ECX is the Right X
  2310.       mov  __RightX, EDX   ; V
  2311.  
  2312.       mov  EBX, __DestBuffer  ; U
  2313.       mov  EDI, EBX           ; U
  2314.       add  EBX, __AddDest     ; V
  2315.       mov  __DestBuffer, EBX  ; U
  2316.  
  2317.       mov  TempLen, ECX
  2318.       sub  TempLen, EAX
  2319.       inc  TempLen
  2320.       mov  EBX, 0
  2321.  
  2322.         ; Check for Easy reject
  2323.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  2324.         jg   NextRowTextureFlatTransHorz
  2325.         cmp  ECX, VMinX      ; Right is smaller than MinX
  2326.         jl   NextRowTextureFlatTransHorz
  2327.  
  2328.         ; Check for Left
  2329.         cmp  EAX, VMinX
  2330.         jge  CheckRightTextureFlatTransHorz
  2331.           mov  EBX, VMinX
  2332.           sub  EBX, EAX
  2333.           mov  EAX, VMinX    ; Set Left to MinX
  2334.  
  2335.         ; Check for Right
  2336.         CheckRightTextureFlatTransHorz :
  2337.           cmp  ECX, VMaxX
  2338.           jle  StartTextureFlatTransHorz
  2339.           mov  ECX, VMaxX    ; Set Right to MaxX
  2340.  
  2341.     StartTextureFlatTransHorz :
  2342.       sub  ECX, EAX
  2343.       inc  ECX
  2344.       add  EDI, EAX
  2345.  
  2346.       cmp  ECX, 0
  2347.       jle  NextRowTextureFlatTransHorz
  2348.  
  2349.       mov  EBP, TempLen
  2350.       shl  EBP, 2
  2351.       add  EBP, __DivTable
  2352.       fld  dword ptr [EBP]
  2353.  
  2354.       mov  EBP, ECX      ; EBP is the loop
  2355.  
  2356.       mov  ECX, TempLen
  2357.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  2358.  
  2359.       mov  EAX, __LeftU    
  2360.       mov  EDX, __RightU         
  2361.       sub  EDX, EAX
  2362.       sar  EDX, 8
  2363.       mov  InDeltaDu, EDX
  2364.       fild InDeltaDu      
  2365.       fmul st, st(1)
  2366.       fistp InDeltaDu
  2367.       
  2368.       mov  EAX, __LeftV    
  2369.       mov  EDX, __RightV         
  2370.       sub  EDX, EAX
  2371.       sar  EDX, 8
  2372.       mov  InDeltaDv, EDX
  2373.       fild InDeltaDv      
  2374.       fmul st, st(1)
  2375.       fistp InDeltaDv
  2376.  
  2377.       fstp DummyFloat
  2378.  
  2379.       push ESI
  2380.  
  2381.       mov  EAX, InDeltaDu
  2382.       imul TempLen
  2383.       mov  ECX, __LeftU
  2384.       sar  ECX, 8
  2385.       add  ECX, EAX
  2386.  
  2387.       mov  EAX, InDeltaDv
  2388.       imul TempLen
  2389.       mov  EDX, __LeftV
  2390.       sar  EDX, 8
  2391.       add  EDX, EAX
  2392.  
  2393.       mov  EAX, __LeftI
  2394.       sar  EAX, 8
  2395.       mov  ESI, __ShadeBuffer
  2396.       mov  InLoopCount, BP
  2397.       mov  EBP, __BlendBuffer
  2398.       
  2399.         InLoopClippedTextureFlatTransHorz :
  2400.           mov  EBX, 0
  2401.           mov  BH, DH
  2402.           mov  BL, CH
  2403.           add  ECX, InDeltaDu
  2404.           add  EBX, __TextureBuffer
  2405.           mov  AL, [EBX]
  2406.           add  EDX, InDeltaDv
  2407.           mov  BL, [EDI]
  2408.           mov  BH, [ESI+EAX]
  2409.           and  EBX, 0FFFFh
  2410.           mov  AL, [EBP+EBX]
  2411.           mov  [EDI], AL
  2412.           inc  EDI
  2413.           dec  InLoopCount
  2414.           jnz  InLoopClippedTextureFlatTransHorz
  2415.     
  2416.       pop  ESI
  2417.  
  2418.       NextRowTextureFlatTransHorz : 
  2419.         mov  EAX, __LeftU
  2420.         mov  EBX, __LeftV
  2421.         add  EAX, __LeftDu
  2422.         add  EBX, __LeftDv
  2423.         mov  __LeftU, EAX
  2424.         mov  __LeftV, EBX
  2425.  
  2426.         mov  EAX, __RightU
  2427.         mov  EBX, __RightV
  2428.         add  EAX, __RightDu
  2429.         add  EBX, __RightDv
  2430.         mov  __RightU, EAX
  2431.         mov  __RightV, EBX
  2432.  
  2433.         dec  ESI
  2434.       jnz  LoopOutClippedTextureFlatTransHorz
  2435.  
  2436.   EndLoopOutTextureFlatTransHorz :
  2437.  
  2438.   pop  ESI
  2439.   pop  EDI
  2440.   pop  EBP
  2441.   ret
  2442. _DrawTextureFlatTransHorz_ ENDP
  2443.  
  2444.  
  2445. ; _DrawTextureGrdTransHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  2446. ;
  2447. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  2448.  
  2449. _DrawTextureGrdTransHorz_ PROC C
  2450.   push EBP
  2451.   push EDI
  2452.   push ESI  
  2453.   
  2454.   mov  Color, EAX
  2455.  
  2456.   sub  EDX, EBX
  2457.   mov  LoopCount, EDX
  2458.  
  2459.   cmp  EBX, 0
  2460.   je   CheckClippedTextureGrdTransHorz 
  2461.  
  2462.     mov  EAX, __LeftDx
  2463.     imul  EBX
  2464.     add  __LeftX, EAX
  2465.  
  2466.     mov  EAX, __RightDx
  2467.     imul  EBX
  2468.     add  __RightX, EAX
  2469.  
  2470.     mov  EAX, __LeftDu
  2471.     imul  EBX
  2472.     add  __LeftU, EAX
  2473.  
  2474.     mov  EAX, __RightDu
  2475.     imul  EBX
  2476.     add  __RightU, EAX
  2477.  
  2478.     mov  EAX, __LeftDv
  2479.     imul  EBX
  2480.     add  __LeftV, EAX
  2481.  
  2482.     mov  EAX, __RightDv
  2483.     imul  EBX
  2484.     add  __RightV, EAX
  2485.  
  2486.     mov  EAX, __LeftDI
  2487.     imul  EBX
  2488.     add  __LeftI, EAX
  2489.  
  2490.     mov  EAX, __RightDI
  2491.     imul  EBX
  2492.     add  __RightI, EAX
  2493.  
  2494.     mov  EAX, __AddDest
  2495.     imul  EBX
  2496.     add  __DestBuffer, EAX
  2497.  
  2498.   CheckClippedTextureGrdTransHorz :
  2499.     cmp  ECX, 0
  2500.     jne  DrawTextureGrdTransHorzClip
  2501.  
  2502.   DrawTextureGrdTransHorzNoClip :
  2503.     cld
  2504.     mov  ESI, LoopCount
  2505.     cmp  ESI, 0
  2506.     jle  EndLoopOutTextureGrdTransHorz
  2507.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2508.     nop          
  2509.  
  2510.     LoopOutTextureGrdTransHorz :
  2511.       mov  EBX, __LeftX    ; U
  2512.       mov  EAX, EBX        ; U
  2513.       add  EBX, __LeftDx   ; V
  2514.       sar  EAX, 16         ; U EAX is the Left X
  2515.       mov  __LeftX, EBX    ; V
  2516.  
  2517.       mov  EDX, __RightX   ; U
  2518.       mov  ECX, EDX        ; U
  2519.       add  EDX, __RightDx  ; V
  2520.       sar  ECX, 16         ; U ECX is the Right X
  2521.       mov  __RightX, EDX   ; V
  2522.  
  2523.       mov  EBX, __DestBuffer  ; U
  2524.       mov  EDI, EBX           ; U
  2525.       add  EBX, __AddDest     ; V
  2526.       sub  ECX, EAX           ; U
  2527.  
  2528.       mov  __DestBuffer, EBX  ; V
  2529.  
  2530.       add  EDI, EAX           ; U
  2531.       inc  ECX                ; V
  2532.  
  2533.       cmp  ECX, 0
  2534.       jle  NextRowTextureGrdTransHorzNoClip
  2535.  
  2536.       mov  EBP, ECX
  2537.       shl  EBP, 2
  2538.       add  EBP, __DivTable
  2539.       fld  dword ptr [EBP]
  2540.       
  2541.       mov  EBP, ECX      ; EBP is the loop
  2542.  
  2543.       mov  EAX, __LeftI    ; U
  2544.       mov  EDX, __RightI   ; U      
  2545.       sub  EDX, EAX
  2546.       sar  EDX, 8
  2547.       mov  EAX, EDX
  2548.       sar  EDX, 01Fh
  2549.       idiv ECX
  2550.       mov  InDeltaDI, EAX
  2551.  
  2552.       mov  EAX, __LeftU
  2553.       mov  EDX, __RightU         
  2554.       sub  EDX, EAX
  2555.       sar  EDX, 8
  2556.       mov  InDeltaDu, EDX
  2557.       fild InDeltaDu      
  2558.       fmul st, st(1)
  2559.       fistp InDeltaDu
  2560.       
  2561.       mov  EAX, __LeftV    
  2562.       mov  EDX, __RightV         
  2563.       sub  EDX, EAX
  2564.       sar  EDX, 8
  2565.       mov  InDeltaDv, EDX
  2566.       fild InDeltaDv      
  2567.       fmul st, st(1)
  2568.       fistp InDeltaDv
  2569.  
  2570.       fstp DummyFloat
  2571.  
  2572.       push ESI
  2573.  
  2574.       mov  ECX, __LeftU
  2575.       mov  EDX, __LeftV
  2576.       mov  ESI, __LeftI
  2577.       sar  ECX, 8
  2578.       sar  EDX, 8
  2579.       sar  ESI, 8
  2580.       mov  InLoopCount, BP
  2581.       mov  EBP, __BlendBuffer
  2582.      
  2583.         InLoopTextureGrdTransHorz :
  2584.           mov  EBX, 0
  2585.           mov  BH, DH
  2586.           mov  BL, CH
  2587.           add  ECX, InDeltaDu
  2588.           add  EBX, __TextureBuffer
  2589.           mov  EAX, ESI
  2590.           mov  AL, [EBX]
  2591.           add  EDX, InDeltaDv
  2592.           add  EAX, __ShadeBuffer
  2593.           mov  BL, [EDI]
  2594.           mov  BH, [EAX]
  2595.           and  EBX, 0FFFFh
  2596.           add  ESI, InDeltaDI
  2597.           mov  AL, [EBP+EBX]
  2598.           mov  [EDI], AL
  2599.           inc  EDI
  2600.           dec  InLoopCount
  2601.           jnz  InLoopTextureGrdTransHorz
  2602.    
  2603.       pop  ESI
  2604.  
  2605.       NextRowTextureGrdTransHorzNoClip :
  2606.         mov  EAX, __LeftU
  2607.         mov  EBX, __LeftV
  2608.         add  EAX, __LeftDu
  2609.         add  EBX, __LeftDv
  2610.         mov  __LeftU, EAX
  2611.         mov  __LeftV, EBX
  2612.  
  2613.         mov  EAX, __RightU
  2614.         mov  EBX, __RightV
  2615.         add  EAX, __RightDu
  2616.         add  EBX, __RightDv
  2617.         mov  __RightU, EAX
  2618.         mov  __RightV, EBX
  2619.  
  2620.         mov  EAX, __LeftI
  2621.         mov  EBX, __RightI
  2622.         add  EAX, __LeftDI
  2623.         add  EBX, __RightDI
  2624.         mov  __LeftI, EAX
  2625.         mov  __RightI, EBX
  2626.  
  2627.         dec  ESI
  2628.       jnz  LoopOutTextureGrdTransHorz
  2629.       jmp  EndLoopOutTextureGrdTransHorz
  2630.  
  2631.   DrawTextureGrdTransHorzClip :
  2632.     cld
  2633.     mov  ESI, LoopCount
  2634.     cmp  ESI, 0
  2635.     jle  EndLoopOutTextureGrdTransHorz
  2636.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2637.     nop          
  2638.  
  2639.     LoopOutClippedTextureGrdTransHorz :
  2640.       mov  EBX, __LeftX    ; U
  2641.       mov  EAX, EBX        ; U
  2642.       add  EBX, __LeftDx   ; V
  2643.       sar  EAX, 16         ; U EAX is the Left X
  2644.       mov  __LeftX, EBX    ; V
  2645.  
  2646.       mov  EDX, __RightX   ; U
  2647.       mov  ECX, EDX        ; U
  2648.       add  EDX, __RightDx  ; V
  2649.       sar  ECX, 16         ; U ECX is the Right X
  2650.       mov  __RightX, EDX   ; V
  2651.  
  2652.       mov  EBX, __DestBuffer  ; U
  2653.       mov  EDI, EBX           ; U
  2654.       add  EBX, __AddDest     ; V
  2655.       mov  __DestBuffer, EBX  ; U
  2656.  
  2657.       mov  TempLen, ECX
  2658.       sub  TempLen, EAX
  2659.       inc  TempLen
  2660.       mov  EBX, 0
  2661.  
  2662.         ; Check for Easy reject
  2663.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  2664.         jg   NextRowTextureGrdTransHorz
  2665.         cmp  ECX, VMinX      ; Right is smaller than MinX
  2666.         jl   NextRowTextureGrdTransHorz
  2667.  
  2668.         ; Check for Left
  2669.         cmp  EAX, VMinX
  2670.         jge  CheckRightTextureGrdTransHorz
  2671.           mov  EBX, VMinX
  2672.           sub  EBX, EAX
  2673.           mov  EAX, VMinX    ; Set Left to MinX
  2674.  
  2675.         ; Check for Right
  2676.         CheckRightTextureGrdTransHorz :
  2677.           cmp  ECX, VMaxX
  2678.           jle  StartTextureGrdTransHorz
  2679.           mov  ECX, VMaxX    ; Set Right to MaxX
  2680.  
  2681.     StartTextureGrdTransHorz :
  2682.       sub  ECX, EAX
  2683.       inc  ECX
  2684.       add  EDI, EAX
  2685.  
  2686.       cmp  ECX, 0
  2687.       jle  NextRowTextureGrdTransHorz
  2688.  
  2689.       mov  EBP, TempLen
  2690.       shl  EBP, 2
  2691.       add  EBP, __DivTable
  2692.       fld  dword ptr [EBP]
  2693.  
  2694.       mov  EBP, ECX      ; EBP is the loop
  2695.  
  2696.       mov  ECX, TempLen
  2697.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  2698.  
  2699.       mov  EAX, __LeftI    ; U
  2700.       mov  EDX, __RightI   ; U      
  2701.       sub  EDX, EAX
  2702.       sar  EDX, 8
  2703.       mov  EAX, EDX
  2704.       sar  EDX, 01Fh
  2705.       idiv ECX
  2706.       mov  InDeltaDI, EAX
  2707.  
  2708.       mov  EAX, __LeftU    
  2709.       mov  EDX, __RightU         
  2710.       sub  EDX, EAX
  2711.       sar  EDX, 8
  2712.       mov  InDeltaDu, EDX
  2713.       fild InDeltaDu      
  2714.       fmul st, st(1)
  2715.       fistp InDeltaDu
  2716.       
  2717.       mov  EAX, __LeftV    
  2718.       mov  EDX, __RightV         
  2719.       sub  EDX, EAX
  2720.       sar  EDX, 8
  2721.       mov  InDeltaDv, EDX
  2722.       fild InDeltaDv      
  2723.       fmul st, st(1)
  2724.       fistp InDeltaDv
  2725.  
  2726.       fstp DummyFloat
  2727.  
  2728.       push ESI
  2729.  
  2730.       mov  EAX, InDeltaDu
  2731.       imul TempLen
  2732.       mov  ECX, __LeftU
  2733.       sar  ECX, 8
  2734.       add  ECX, EAX
  2735.  
  2736.       mov  EAX, InDeltaDI
  2737.       imul TempLen
  2738.       mov  ESI, __LeftI
  2739.       sar  ESI, 8
  2740.       add  ESI, EAX
  2741.       
  2742.       mov  EAX, InDeltaDv
  2743.       imul TempLen
  2744.       mov  EDX, __LeftV
  2745.       sar  EDX, 8
  2746.       add  EDX, EAX
  2747.       mov  InLoopCount, BP
  2748.       mov  EBP, __BlendBuffer
  2749.  
  2750.         InLoopClippedTextureGrdTransHorz :
  2751.           mov  EBX, 0
  2752.           mov  BH, DH
  2753.           mov  BL, CH
  2754.           add  ECX, InDeltaDu
  2755.           add  EBX, __TextureBuffer
  2756.           mov  EAX, ESI
  2757.           mov  AL, [EBX]
  2758.           add  EDX, InDeltaDv
  2759.           add  EAX, __ShadeBuffer
  2760.           mov  BL, [EDI]
  2761.           mov  BH, [EAX]
  2762.           and  EBX, 0FFFFh
  2763.           add  ESI, InDeltaDI
  2764.           mov  AL, [EBP+EBX]
  2765.           mov  [EDI], AL
  2766.           inc  EDI
  2767.           dec  InLoopCount
  2768.           jnz  InLoopClippedTextureGrdTransHorz
  2769.     
  2770.       pop  ESI
  2771.  
  2772.       NextRowTextureGrdTransHorz : 
  2773.         mov  EAX, __LeftU
  2774.         mov  EBX, __LeftV
  2775.         add  EAX, __LeftDu
  2776.         add  EBX, __LeftDv
  2777.         mov  __LeftU, EAX
  2778.         mov  __LeftV, EBX
  2779.    
  2780.         mov  EAX, __RightU
  2781.         mov  EBX, __RightV
  2782.         add  EAX, __RightDu
  2783.         add  EBX, __RightDv
  2784.         mov  __RightU, EAX
  2785.         mov  __RightV, EBX
  2786.  
  2787.         mov  EAX, __LeftI
  2788.         mov  EBX, __RightI
  2789.         add  EAX, __LeftDI
  2790.         add  EBX, __RightDI
  2791.         mov  __LeftI, EAX
  2792.         mov  __RightI, EBX
  2793.  
  2794.         dec  ESI
  2795.       jnz  LoopOutClippedTextureGrdTransHorz
  2796.  
  2797.   EndLoopOutTextureGrdTransHorz :
  2798.  
  2799.   pop  ESI
  2800.   pop  EDI
  2801.   pop  EBP
  2802.   ret
  2803. _DrawTextureGrdTransHorz_ ENDP
  2804.  
  2805.  
  2806. ;***************************************************
  2807. ;
  2808. ;  Hazing Routines
  2809. ;
  2810. ;***************************************************
  2811.  
  2812. ; _DrawSolidNoHazeHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  2813. ;
  2814. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  2815.  
  2816. _DrawSolidNoHazeHorz_ PROC C
  2817.   push EBP
  2818.   push EDI
  2819.   push ESI  
  2820.   
  2821.   mov  Color, EAX
  2822.  
  2823.   sub  EDX, EBX
  2824.   mov  LoopCount, EDX
  2825.  
  2826.   cmp  EBX, 0
  2827.   je   CheckClippedSolidNoHazeHorz 
  2828.  
  2829.     mov  EAX, __LeftDx
  2830.     imul  EBX
  2831.     add  __LeftX, EAX
  2832.  
  2833.     mov  EAX, __RightDx
  2834.     imul  EBX
  2835.     add  __RightX, EAX
  2836.  
  2837.     mov  EAX, __LeftDh
  2838.     imul  EBX
  2839.     add  __LeftH, EAX
  2840.  
  2841.     mov  EAX, __RightDh
  2842.     imul  EBX
  2843.     add  __RightH, EAX
  2844.  
  2845.     mov  EAX, __AddDest
  2846.     imul  EBX
  2847.     add  __DestBuffer, EAX
  2848.  
  2849.   CheckClippedSolidNoHazeHorz :
  2850.     cmp  ECX, 0
  2851.     jne  DrawSolidNoHazeHorzClip
  2852.  
  2853.   DrawSolidNoHazeHorzNoClip :
  2854.     cld
  2855.     mov  ESI, LoopCount
  2856.     cmp  ESI, 0
  2857.     jle  EndLoopOutSolidNoHazeHorz
  2858.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2859.     nop          
  2860.  
  2861.     LoopOutSolidNoHazeHorz :
  2862.       mov  EBX, __LeftX    ; U
  2863.       mov  EAX, EBX        ; U
  2864.       add  EBX, __LeftDx   ; V
  2865.       sar  EAX, 16         ; U EAX is the Left X
  2866.       mov  __LeftX, EBX    ; V
  2867.  
  2868.       mov  EDX, __RightX   ; U
  2869.       mov  ECX, EDX        ; U
  2870.       add  EDX, __RightDx  ; V
  2871.       sar  ECX, 16         ; U ECX is the Right X
  2872.       mov  __RightX, EDX   ; V
  2873.  
  2874.       mov  EBX, __DestBuffer  ; U
  2875.       mov  EDI, EBX           ; U
  2876.       add  EBX, __AddDest     ; V
  2877.       sub  ECX, EAX           ; U
  2878.  
  2879.       mov  __DestBuffer, EBX  ; V
  2880.  
  2881.       add  EDI, EAX           ; U
  2882.       inc  ECX                ; V
  2883.       
  2884.       mov  EBX, __LeftH    ; U
  2885.       mov  EAX, EBX        ; U   EAX is the Left Haze
  2886.       add  EBX, __LeftDh   ; V
  2887.       mov  __LeftH, EBX    ; V
  2888.       
  2889.       mov  EBX, __RightH   ; U
  2890.       mov  EDX, EBX        ; U   EDX is the Right Haze
  2891.       add  EBX, __RightDh  ; V
  2892.       mov  __RightH, EBX   ; V
  2893.             
  2894.       cmp  ECX, 0
  2895.       jle  NextRowSolidNoHazeHorzNoClip
  2896.       
  2897.       mov  EBX, EAX        ; EBX is the Left Haze
  2898.       sub  EDX, EAX
  2899.       mov  EAX, EDX
  2900.       sar  EDX, 01Fh
  2901.       idiv ECX
  2902.       mov  InDeltaDh, EAX
  2903.  
  2904.       mov  EBP, __LeftH
  2905.       mov  EAX, Color        
  2906.       mov  EDX, InDeltaDh
  2907.       push ESI
  2908.       mov  ESI, __HazeBuffer
  2909.       
  2910.         InLoopSolidNoHazeHorz :
  2911.           mov  EBX, EBP
  2912.           shr  EBX, 8
  2913.           mov  BL, AL
  2914.           add  EBP, EDX
  2915.           mov  AH, [EBX+ESI]
  2916.           mov  [EDI], AH
  2917.           inc  EDI
  2918.           loop InLoopSolidNoHazeHorz
  2919.  
  2920.       pop  ESI
  2921.  
  2922.       NextRowSolidNoHazeHorzNoClip :
  2923.         dec  ESI
  2924.         jnz  LoopOutSolidNoHazeHorz
  2925.       jmp  EndLoopOutSolidNoHazeHorz
  2926.  
  2927.   DrawSolidNoHazeHorzClip :
  2928.     cld
  2929.     mov  ESI, LoopCount
  2930.     cmp  ESI, 0
  2931.     jle  EndLoopOutSolidNoHazeHorz
  2932.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  2933.     nop          
  2934.  
  2935.     LoopOutClippedSolidNoHazeHorz :
  2936.       mov  EBX, __LeftX    ; U
  2937.       mov  EAX, EBX        ; U
  2938.       add  EBX, __LeftDx   ; V
  2939.       sar  EAX, 16         ; U EAX is the Left X
  2940.       mov  __LeftX, EBX    ; V
  2941.  
  2942.       mov  EDX, __RightX   ; U
  2943.       mov  ECX, EDX        ; U
  2944.       add  EDX, __RightDx  ; V
  2945.       sar  ECX, 16         ; U ECX is the Right X
  2946.       mov  __RightX, EDX   ; V
  2947.  
  2948.       mov  EBX, __DestBuffer  ; U
  2949.       mov  EDI, EBX           ; U
  2950.       add  EBX, __AddDest     ; V
  2951.       mov  __DestBuffer, EBX  ; U
  2952.  
  2953.       mov  TempLen, ECX
  2954.       sub  TempLen, EAX
  2955.       inc  TempLen
  2956.       mov  EBX, 0
  2957.  
  2958.         ; Check for Easy reject
  2959.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  2960.         jg   NextRowSolidNoHazeHorz
  2961.         cmp  ECX, VMinX      ; Right is smaller than MinX
  2962.         jl   NextRowSolidNoHazeHorz
  2963.  
  2964.         ; Check for Left
  2965.         cmp  EAX, VMinX
  2966.         jge  CheckRightSolidNoHazeHorz
  2967.           mov  EBX, VMinX
  2968.           sub  EBX, EAX
  2969.           mov  EAX, VMinX    ; Set Left to MinX
  2970.  
  2971.         ; Check for Right
  2972.         CheckRightSolidNoHazeHorz :
  2973.           cmp  ECX, VMaxX
  2974.           jle  StartSolidNoHazeHorz
  2975.           mov  ECX, VMaxX    ; Set Right to MaxX
  2976.  
  2977.     StartSolidNoHazeHorz :  ; Clipped
  2978.       sub  ECX, EAX
  2979.       inc  ECX
  2980.  
  2981.       add  EDI, EAX
  2982.  
  2983.       mov  EBP, TempLen    ; EBP is the loop count before clipped
  2984.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  2985.  
  2986.       mov  EBX, __LeftH    ; U
  2987.       mov  EAX, EBX        ; U   EAX is the Left Haze
  2988.       add  EBX, __LeftDh   ; V
  2989.       mov  __LeftH, EBX    ; V
  2990.       
  2991.       mov  EBX, __RightH   ; U
  2992.       mov  EDX, EBX        ; U   EDX is the Right Haze
  2993.       add  EBX, __RightDh  ; V
  2994.       mov  __RightH, EBX   ; V
  2995.             
  2996.       cmp  ECX, 0
  2997.       jle  NextRowSolidNoHazeHorz
  2998.  
  2999.       mov  EBX, EAX        ; EAX is Left Haze
  3000.       sub  EDX, EAX
  3001.       mov  EAX, EDX
  3002.       sar  EDX, 01Fh
  3003.       idiv EBP
  3004.       mov  InDeltaDh, EAX
  3005.  
  3006.       ; Add Delta for Skipped pixel
  3007.       mov  EBP, __LeftH
  3008.       mov  EAX, InDeltaDh
  3009.       imul TempLen 
  3010.       add  EBP, EAX
  3011.  
  3012.       mov  EAX, Color        
  3013.       mov  EDX, InDeltaDh 
  3014.       push ESI
  3015.       mov  ESI, __HazeBuffer
  3016.       
  3017.         InLoopClippedSolidNoHazeHorz :
  3018.           mov  EBX, EBP
  3019.           shr  EBX, 8
  3020.           mov  BL, AL
  3021.           mov  AH, [EBX+ESI]
  3022.           add  EBP, EDX
  3023.           mov  [EDI], AH
  3024.           inc  EDI
  3025.           loop InLoopClippedSolidNoHazeHorz
  3026.     
  3027.       pop  ESI
  3028.       NextRowSolidNoHazeHorz : 
  3029.         dec  ESI
  3030.       jnz  LoopOutClippedSolidNoHazeHorz
  3031.  
  3032.   EndLoopOutSolidNoHazeHorz :
  3033.  
  3034.   pop  ESI
  3035.   pop  EDI
  3036.   pop  EBP
  3037.   ret
  3038. _DrawSolidNoHazeHorz_ ENDP
  3039.  
  3040.  
  3041. ; _DrawSolidGrdHazeHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  3042. ;
  3043. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  3044.  
  3045. _DrawSolidGrdHazeHorz_ PROC C
  3046.   push EBP
  3047.   push EDI
  3048.   push ESI  
  3049.   
  3050.   mov  Color, EAX
  3051.  
  3052.   sub  EDX, EBX
  3053.   mov  LoopCount, EDX
  3054.  
  3055.   cmp  EBX, 0
  3056.   je   CheckClippedSolidGrdHazeHorz 
  3057.  
  3058.     mov  EAX, __LeftDx
  3059.     imul  EBX
  3060.     add  __LeftX, EAX
  3061.  
  3062.     mov  EAX, __RightDx
  3063.     imul  EBX
  3064.     add  __RightX, EAX
  3065.  
  3066.     mov  EAX, __LeftDI
  3067.     imul  EBX
  3068.     add  __LeftI, EAX
  3069.  
  3070.     mov  EAX, __RightDI
  3071.     imul  EBX
  3072.     add  __RightI, EAX
  3073.  
  3074.     mov  EAX, __LeftDh
  3075.     imul  EBX
  3076.     add  __LeftH, EAX
  3077.  
  3078.     mov  EAX, __RightDh
  3079.     imul  EBX
  3080.     add  __RightH, EAX
  3081.  
  3082.     mov  EAX, __AddDest
  3083.     imul  EBX
  3084.     add  __DestBuffer, EAX
  3085.  
  3086.   CheckClippedSolidGrdHazeHorz :
  3087.     cmp  ECX, 0
  3088.     jne  DrawSolidGrdHazeHorzClip
  3089.  
  3090.   DrawSolidGrdHazeHorzNoClip :
  3091.     cld
  3092.     mov  ESI, LoopCount
  3093.     cmp  ESI, 0
  3094.     jle  EndLoopOutSolidGrdHazeHorz
  3095.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3096.     nop          
  3097.  
  3098.     LoopOutSolidGrdHazeHorz :
  3099.       mov  EBX, __LeftX    ; U
  3100.       mov  EAX, EBX        ; U
  3101.       add  EBX, __LeftDx   ; V
  3102.       sar  EAX, 16         ; U EAX is the Left X
  3103.       mov  __LeftX, EBX    ; V
  3104.  
  3105.       mov  EDX, __RightX   ; U
  3106.       mov  ECX, EDX        ; U
  3107.       add  EDX, __RightDx  ; V
  3108.       sar  ECX, 16         ; U ECX is the Right X
  3109.       mov  __RightX, EDX   ; V
  3110.  
  3111.       mov  EBX, __DestBuffer  ; U
  3112.       mov  EDI, EBX           ; U
  3113.       add  EBX, __AddDest     ; V
  3114.       sub  ECX, EAX           ; U
  3115.  
  3116.       mov  __DestBuffer, EBX  ; V
  3117.  
  3118.       add  EDI, EAX           ; U
  3119.       inc  ECX                ; V
  3120.       
  3121.       cmp  ECX, 0
  3122.       jle  NextRowSolidGrdHazeHorzNoClip
  3123.  
  3124.       mov  EAX, __LeftI    ; U     EAX is the Left I
  3125.       mov  EDX, __RightI   ; U     EDX is the Right I      
  3126.       sub  EDX, EAX
  3127.       sar  EDX, 8
  3128.       mov  EAX, EDX
  3129.       sar  EDX, 01Fh
  3130.       idiv ECX
  3131.       mov  InDeltaDI, EAX
  3132.  
  3133.       mov  EAX, __LeftH    ; U     EAX is the Left Haze
  3134.       mov  EDX, __RightH   ; U     EDX is the Right Haze      
  3135.       sub  EDX, EAX
  3136.       sar  EDX, 8
  3137.       mov  EAX, EDX
  3138.       sar  EDX, 01Fh
  3139.       idiv ECX
  3140.       mov  InDeltaDh, EAX
  3141.  
  3142.       mov  EBP, __LeftI
  3143.       sar  EBP, 8
  3144.       mov  EAX, Color        
  3145.       mov  EDX, __HazeBuffer
  3146.       push ESI
  3147.       mov  ESI, __ShadeBuffer
  3148.       mov  InLoopCount, CX
  3149.       mov  ECX, __LeftH
  3150.       sar  ECX, 8
  3151.       
  3152.         InLoopSolidGrdHazeHorz :
  3153.           mov  EBX, EBP
  3154.           mov  BL, AL
  3155.           add  EBP, InDeltaDI
  3156.           mov  AH, [EBX+ESI]
  3157.           mov  EBX, ECX
  3158.           mov  BL, AH
  3159.           add  ECX, InDeltaDh
  3160.           mov  AH, [EBX+EDX]
  3161.           mov  [EDI], AH
  3162.           inc  EDI
  3163.           dec  InLoopCount
  3164.           jnz  InLoopSolidGrdHazeHorz
  3165.  
  3166.       pop  ESI
  3167.  
  3168.       NextRowSolidGrdHazeHorzNoClip :
  3169.         mov  EAX, __LeftI
  3170.         mov  EBX, __RightI
  3171.         add  EAX, __LeftDI
  3172.         add  EBX, __RightDI
  3173.         mov  __LeftI, EAX
  3174.         mov  __RightI, EBX
  3175.  
  3176.         mov  EAX, __LeftH
  3177.         mov  EBX, __RightH
  3178.         add  EAX, __LeftDh
  3179.         add  EBX, __RightDh
  3180.         mov  __LeftH, EAX
  3181.         mov  __RightH, EBX
  3182.  
  3183.         dec  ESI
  3184.         jnz  LoopOutSolidGrdHazeHorz
  3185.       jmp  EndLoopOutSolidGrdHazeHorz
  3186.  
  3187.   DrawSolidGrdHazeHorzClip :
  3188.     cld
  3189.     mov  ESI, LoopCount
  3190.     cmp  ESI, 0
  3191.     jle  EndLoopOutSolidGrdHazeHorz
  3192.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3193.     nop          
  3194.  
  3195.     LoopOutClippedSolidGrdHazeHorz :
  3196.       mov  EBX, __LeftX    ; U
  3197.       mov  EAX, EBX        ; U
  3198.       add  EBX, __LeftDx   ; V
  3199.       sar  EAX, 16         ; U EAX is the Left X
  3200.       mov  __LeftX, EBX    ; V
  3201.  
  3202.       mov  EDX, __RightX   ; U
  3203.       mov  ECX, EDX        ; U
  3204.       add  EDX, __RightDx  ; V
  3205.       sar  ECX, 16         ; U ECX is the Right X
  3206.       mov  __RightX, EDX   ; V
  3207.  
  3208.       mov  EBX, __DestBuffer  ; U
  3209.       mov  EDI, EBX           ; U
  3210.       add  EBX, __AddDest     ; V
  3211.       mov  __DestBuffer, EBX  ; U
  3212.  
  3213.       mov  TempLen, ECX
  3214.       sub  TempLen, EAX
  3215.       inc  TempLen
  3216.       mov  EBX, 0
  3217.  
  3218.         ; Check for Easy reject
  3219.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  3220.         jg   NextRowSolidGrdHazeHorz
  3221.         cmp  ECX, VMinX      ; Right is smaller than MinX
  3222.         jl   NextRowSolidGrdHazeHorz
  3223.  
  3224.         ; Check for Left
  3225.         cmp  EAX, VMinX
  3226.         jge  CheckRightSolidGrdHazeHorz
  3227.           mov  EBX, VMinX
  3228.           sub  EBX, EAX
  3229.           mov  EAX, VMinX    ; Set Left to MinX
  3230.  
  3231.         ; Check for Right
  3232.         CheckRightSolidGrdHazeHorz :
  3233.           cmp  ECX, VMaxX
  3234.           jle  StartSolidGrdHazeHorz
  3235.           mov  ECX, VMaxX    ; Set Right to MaxX
  3236.  
  3237.     StartSolidGrdHazeHorz :  ; Clipped
  3238.       sub  ECX, EAX
  3239.       inc  ECX
  3240.       cmp  ECX, 0
  3241.       jle  NextRowSolidGrdHazeHorz
  3242.  
  3243.       add  EDI, EAX
  3244.       
  3245.       mov  EBP, TempLen    ; EBP is the loop count before clipped
  3246.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  3247.  
  3248.       mov  EAX, __LeftI    ; U     EAX is the Left I
  3249.       mov  EDX, __RightI   ; U     EDX is the Right I      
  3250.       sub  EDX, EAX
  3251.       sar  EDX, 8
  3252.       mov  EAX, EDX
  3253.       sar  EDX, 01Fh
  3254.       idiv EBP
  3255.       mov  InDeltaDI, EAX
  3256.  
  3257.       mov  EAX, __LeftH    ; U     EAX is the Left Haze
  3258.       mov  EDX, __RightH   ; U     EDX is the Right Haze            
  3259.       sub  EDX, EAX
  3260.       sar  EDX, 8
  3261.       mov  EAX, EDX
  3262.       sar  EDX, 01Fh
  3263.       idiv EBP
  3264.       mov  InDeltaDh, EAX
  3265.  
  3266.       mov  InLoopCount, CX
  3267.       
  3268.       ; Add Delta for Skipped pixel
  3269.       mov  EBP, __LeftI
  3270.       sar  EBP, 8
  3271.       mov  EAX, InDeltaDI
  3272.       imul TempLen 
  3273.       add  EBP, EAX
  3274.  
  3275.       mov  ECX, __LeftH
  3276.       sar  ECX, 8
  3277.       mov  EAX, InDeltaDh
  3278.       imul TempLen 
  3279.       add  ECX, EAX
  3280.       
  3281.       mov  EAX, Color        
  3282.       mov  EDX, __HazeBuffer
  3283.       push ESI
  3284.       mov  ESI, __ShadeBuffer
  3285.       
  3286.         InLoopClippedSolidGrdHazeHorz :
  3287.           mov  EBX, EBP
  3288.           mov  BL, AL
  3289.           add  EBP, InDeltaDI
  3290.           mov  AH, [EBX+ESI]
  3291.           mov  EBX, ECX
  3292.           mov  BL, AH
  3293.           add  ECX, InDeltaDh
  3294.           mov  AH, [EBX+EDX]
  3295.           mov  [EDI], AH
  3296.           inc  EDI
  3297.           dec  InLoopCount
  3298.           jnz  InLoopClippedSolidGrdHazeHorz
  3299.     
  3300.       pop  ESI
  3301.       
  3302.       NextRowSolidGrdHazeHorz : 
  3303.         mov  EAX, __LeftI
  3304.         mov  EBX, __RightI
  3305.         add  EAX, __LeftDI
  3306.         add  EBX, __RightDI
  3307.         mov  __LeftI, EAX
  3308.         mov  __RightI, EBX
  3309.  
  3310.         mov  EAX, __LeftH
  3311.         mov  EBX, __RightH
  3312.         add  EAX, __LeftDh
  3313.         add  EBX, __RightDh
  3314.         mov  __LeftH, EAX
  3315.         mov  __RightH, EBX
  3316.  
  3317.         dec  ESI
  3318.       jnz  LoopOutClippedSolidGrdHazeHorz
  3319.  
  3320.   EndLoopOutSolidGrdHazeHorz :
  3321.  
  3322.   pop  ESI
  3323.   pop  EDI
  3324.   pop  EBP
  3325.   ret
  3326. _DrawSolidGrdHazeHorz_ ENDP
  3327.  
  3328. ; _DrawTextureNoHazeHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  3329. ;
  3330. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  3331.  
  3332. _DrawTextureNoHazeHorz_ PROC C
  3333.   push EBP
  3334.   push EDI
  3335.   push ESI  
  3336.   
  3337.   sub  EDX, EBX
  3338.   mov  LoopCount, EDX
  3339.  
  3340.   cmp  EBX, 0
  3341.   je   CheckClippedTextureNoHazeHorz 
  3342.  
  3343.     mov  EAX, __LeftDx
  3344.     imul  EBX
  3345.     add  __LeftX, EAX
  3346.  
  3347.     mov  EAX, __RightDx
  3348.     imul  EBX
  3349.     add  __RightX, EAX
  3350.  
  3351.     mov  EAX, __LeftDu
  3352.     imul  EBX
  3353.     add  __LeftU, EAX
  3354.  
  3355.     mov  EAX, __RightDu
  3356.     imul  EBX
  3357.     add  __RightU, EAX
  3358.  
  3359.     mov  EAX, __LeftDv
  3360.     imul  EBX
  3361.     add  __LeftV, EAX
  3362.  
  3363.     mov  EAX, __RightDv
  3364.     imul  EBX
  3365.     add  __RightV, EAX
  3366.  
  3367.     mov  EAX, __LeftDh
  3368.     imul  EBX
  3369.     add  __LeftH, EAX
  3370.  
  3371.     mov  EAX, __RightDh
  3372.     imul  EBX
  3373.     add  __RightH, EAX
  3374.     
  3375.     mov  EAX, __AddDest
  3376.     imul  EBX
  3377.     add  __DestBuffer, EAX
  3378.  
  3379.   CheckClippedTextureNoHazeHorz :
  3380.     cmp  ECX, 0
  3381.     jne  DrawTextureNoHazeHorzClip
  3382.  
  3383.   DrawTextureNoHazeHorzNoClip :
  3384.     cld
  3385.     mov  ESI, LoopCount
  3386.     cmp  ESI, 0
  3387.     jle  EndLoopOutTextureNoHazeHorz
  3388.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3389.     nop          
  3390.  
  3391.     LoopOutTextureNoHazeHorz :
  3392.       mov  EBX, __LeftX    ; U
  3393.       mov  EAX, EBX        ; U
  3394.       add  EBX, __LeftDx   ; V
  3395.       sar  EAX, 16         ; U EAX is the Left X
  3396.       mov  __LeftX, EBX    ; V
  3397.  
  3398.       mov  EDX, __RightX   ; U
  3399.       mov  ECX, EDX        ; U
  3400.       add  EDX, __RightDx  ; V
  3401.       sar  ECX, 16         ; U ECX is the Right X
  3402.       mov  __RightX, EDX   ; V
  3403.  
  3404.       mov  EBX, __DestBuffer  ; U
  3405.       mov  EDI, EBX           ; U
  3406.       add  EBX, __AddDest     ; V
  3407.       mov  __DestBuffer, EBX  ; U
  3408.  
  3409.       sub  ECX, EAX           ; V
  3410.       add  EDI, EAX           ; U
  3411.       inc  ECX                ; V
  3412.             
  3413.       cmp  ECX, 0
  3414.       jle  NextRowTextureNoHazeHorzNoClip
  3415.  
  3416.       mov  EBP, ECX
  3417.       shl  EBP, 2
  3418.       add  EBP, __DivTable
  3419.       fld  dword ptr [EBP] 
  3420.       
  3421.       mov  EBP, ECX      ; EBP is the loop
  3422.  
  3423.       mov  EAX, __LeftH    ; U     EAX is the Left Haze
  3424.       mov  EDX, __RightH   ; U     EDX is the Right Haze      
  3425.       sub  EDX, EAX
  3426.       sar  EDX, 8
  3427.       mov  EAX, EDX
  3428.       sar  EDX, 01Fh
  3429.       idiv ECX
  3430.       mov  InDeltaDh, EAX
  3431.  
  3432.       mov  EAX, __LeftU    
  3433.       mov  EDX, __RightU         
  3434.       sub  EDX, EAX
  3435.       sar  EDX, 8
  3436.       mov  InDeltaDu, EDX
  3437.       fild InDeltaDu      
  3438.       fmul st, st(1)
  3439.       fistp InDeltaDu
  3440.       
  3441.       mov  EAX, __LeftV    
  3442.       mov  EDX, __RightV         
  3443.       sub  EDX, EAX
  3444.       sar  EDX, 8
  3445.       mov  InDeltaDv, EDX
  3446.       fild InDeltaDv      
  3447.       fmul st, st(1)
  3448.       fistp InDeltaDv
  3449.  
  3450.       fstp DummyFloat
  3451.  
  3452.       push ESI
  3453.  
  3454.       mov  EAX, __LeftH
  3455.       sar  EAX, 8
  3456.       mov  ECX, __LeftU
  3457.       sar  ECX, 8
  3458.       mov  EDX, __LeftV
  3459.       sar  EDX, 8
  3460.       mov  ESI, __TextureBuffer
  3461.       mov  InLoopCount, BP
  3462.       mov  EBP, __HazeBuffer
  3463.       mov  EBX, 0
  3464.  
  3465.         InLoopTextureNoHazeHorz :
  3466.           mov  BH, DH
  3467.           mov  BL, CH
  3468.           add  ECX, InDeltaDu
  3469.           mov  BL, [EBX+ESI]
  3470.           mov  BH, AH
  3471.           add  EAX, InDeltaDh          
  3472.           mov  BL, [EBX+EBP]
  3473.           add  EDX, InDeltaDv
  3474.           mov  [EDI], BL
  3475.           inc  EDI
  3476.           dec  InLoopCount
  3477.           jnz  InLoopTextureNoHazeHorz
  3478.  
  3479.       pop  ESI
  3480.  
  3481.       NextRowTextureNoHazeHorzNoClip :
  3482.  
  3483.       mov  EAX, __LeftU
  3484.       mov  EBX, __LeftV
  3485.       add  EAX, __LeftDu
  3486.       add  EBX, __LeftDv
  3487.       mov  __LeftU, EAX
  3488.       mov  __LeftV, EBX
  3489.  
  3490.       mov  EAX, __RightU
  3491.       mov  EBX, __RightV
  3492.       add  EAX, __RightDu
  3493.       add  EBX, __RightDv
  3494.       mov  __RightU, EAX
  3495.       mov  __RightV, EBX
  3496.  
  3497.       mov  EAX, __LeftH
  3498.       mov  EBX, __RightH
  3499.       add  EAX, __LeftDh
  3500.       add  EBX, __RightDh
  3501.       mov  __LeftH, EAX
  3502.       mov  __RightH, EBX
  3503.  
  3504.       dec  ESI
  3505.       jnz  LoopOutTextureNoHazeHorz
  3506.       jmp  EndLoopOutTextureNoHazeHorz
  3507.  
  3508.   DrawTextureNoHazeHorzClip :
  3509.     cld
  3510.     mov  ESI, LoopCount
  3511.     cmp  ESI, 0
  3512.     jle  EndLoopOutTextureNoHazeHorz
  3513.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3514.     nop          
  3515.  
  3516.     LoopOutClippedTextureNoHazeHorz :
  3517.       mov  EBX, __LeftX    ; U
  3518.       mov  EAX, EBX        ; U
  3519.       add  EBX, __LeftDx   ; V
  3520.       sar  EAX, 16         ; U EAX is the Left X
  3521.       mov  __LeftX, EBX    ; V
  3522.  
  3523.       mov  EDX, __RightX   ; U
  3524.       mov  ECX, EDX        ; U
  3525.       add  EDX, __RightDx  ; V
  3526.       sar  ECX, 16         ; U ECX is the Right X
  3527.       mov  __RightX, EDX   ; V
  3528.  
  3529.       mov  EBX, __DestBuffer  ; U
  3530.       mov  EDI, EBX           ; U
  3531.       add  EBX, __AddDest     ; V
  3532.       mov  __DestBuffer, EBX  ; U
  3533.  
  3534.       mov  TempLen, ECX
  3535.       sub  TempLen, EAX
  3536.       inc  TempLen
  3537.       mov  EBX, 0
  3538.  
  3539.         ; Check for Easy reject
  3540.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  3541.         jg   NextRowTextureNoHazeHorz
  3542.         cmp  ECX, VMinX      ; Right is smaller than MinX
  3543.         jl   NextRowTextureNoHazeHorz
  3544.  
  3545.         ; Check for Left
  3546.         cmp  EAX, VMinX
  3547.         jge  CheckRightTextureNoHazeHorz
  3548.           mov  EBX, VMinX
  3549.           sub  EBX, EAX
  3550.           mov  EAX, VMinX    ; Set Left to MinX
  3551.  
  3552.         ; Check for Right
  3553.       CheckRightTextureNoHazeHorz :
  3554.         cmp  ECX, VMaxX
  3555.         jle  StartTextureNoHazeHorz
  3556.         mov  ECX, VMaxX    ; Set Right to MaxX
  3557.  
  3558.     StartTextureNoHazeHorz :
  3559.       sub  ECX, EAX
  3560.       inc  ECX
  3561.  
  3562.       cmp  ECX, 0
  3563.       jle  NextRowTextureNoHazeHorz
  3564.  
  3565.       add  EDI, EAX
  3566.  
  3567.       mov  EBP, TempLen
  3568.       shl  EBP, 2
  3569.       add  EBP, __DivTable
  3570.       fld  dword ptr [EBP]
  3571.       
  3572.       mov  EBP, TempLen
  3573.       mov  TempLen, EBX
  3574.  
  3575.       mov  EAX, __LeftH    ; U     EAX is the Left Haze
  3576.       mov  EDX, __RightH   ; U     EDX is the Right Haze      
  3577.       sub  EDX, EAX
  3578.       sar  EDX, 8
  3579.       mov  EAX, EDX
  3580.       sar  EDX, 01Fh
  3581.       idiv EBP
  3582.       mov  InDeltaDh, EAX
  3583.  
  3584.       mov  EAX, __LeftU
  3585.       mov  EDX, __RightU         
  3586.       sub  EDX, EAX
  3587.       sar  EDX, 8
  3588.       mov  InDeltaDu, EDX
  3589.       fild InDeltaDu      
  3590.       fmul st, st(1)
  3591.       fistp InDeltaDu
  3592.       
  3593.       mov  EAX, __LeftV    
  3594.       mov  EDX, __RightV         
  3595.       sub  EDX, EAX
  3596.       sar  EDX, 8
  3597.       mov  InDeltaDv, EDX
  3598.       fild InDeltaDv      
  3599.       fmul st, st(1)
  3600.       fistp InDeltaDv
  3601.  
  3602.       fstp  DummyFloat
  3603.  
  3604.       push ESI
  3605.  
  3606.       mov  InLoopCount, CX
  3607.  
  3608.       mov  EAX, InDeltaDh
  3609.       imul TempLen
  3610.       mov  EBX, __LeftH
  3611.       sar  EBX, 8
  3612.       add  EBX, EAX
  3613.  
  3614.       mov  EAX, InDeltaDu
  3615.       imul TempLen
  3616.       mov  ECX, __LeftU
  3617.       sar  ECX, 8
  3618.       add  ECX, EAX
  3619.  
  3620.       mov  EAX, InDeltaDv
  3621.       imul TempLen
  3622.       mov  EDX, __LeftV
  3623.       sar  EDX, 8
  3624.       add  EDX, EAX
  3625.  
  3626.       mov  EAX, EBX
  3627.       mov  EBP, __HazeBuffer      
  3628.       mov  ESI, __TextureBuffer
  3629.       mov  EBX, 0
  3630.  
  3631.         InLoopClippedTextureNoHazeHorz :
  3632.           mov  BH, DH
  3633.           mov  BL, CH
  3634.           add  ECX, InDeltaDu
  3635.           mov  BL, [EBX+ESI]
  3636.           mov  BH, AH
  3637.           add  EAX, InDeltaDh          
  3638.           mov  BL, [EBX+EBP]
  3639.           add  EDX, InDeltaDv
  3640.           mov  [EDI], BL
  3641.           inc  EDI
  3642.           dec  InLoopCount
  3643.           jnz  InLoopClippedTextureNoHazeHorz
  3644.  
  3645.       pop  ESI
  3646.  
  3647.       NextRowTextureNoHazeHorz : 
  3648.         mov  EAX, __LeftU
  3649.         mov  EBX, __LeftV
  3650.         add  EAX, __LeftDu
  3651.         add  EBX, __LeftDv
  3652.         mov  __LeftU, EAX
  3653.         mov  __LeftV, EBX
  3654.  
  3655.         mov  EAX, __RightU
  3656.         mov  EBX, __RightV
  3657.         add  EAX, __RightDu
  3658.         add  EBX, __RightDv
  3659.         mov  __RightU, EAX
  3660.         mov  __RightV, EBX
  3661.  
  3662.         mov  EAX, __LeftH
  3663.         mov  EBX, __RightH
  3664.         add  EAX, __LeftDh
  3665.         add  EBX, __RightDh
  3666.         mov  __LeftH, EAX
  3667.         mov  __RightH, EBX
  3668.  
  3669.         dec  ESI
  3670.       jnz  LoopOutClippedTextureNoHazeHorz
  3671.  
  3672.   EndLoopOutTextureNoHazeHorz :
  3673.  
  3674.   pop  ESI
  3675.   pop  EDI
  3676.   pop  EBP
  3677.   ret
  3678. _DrawTextureNoHazeHorz_ ENDP
  3679.  
  3680.  
  3681. ; _DrawTextureFlatHazeHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  3682. ;
  3683. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  3684.  
  3685. _DrawTextureFlatHazeHorz_ PROC C
  3686.   push EBP
  3687.   push EDI
  3688.   push ESI  
  3689.   
  3690.   sub  EDX, EBX
  3691.   mov  LoopCount, EDX
  3692.  
  3693.   cmp  EBX, 0
  3694.   je   CheckClippedTextureFlatHazeHorz 
  3695.  
  3696.     mov  EAX, __LeftDx
  3697.     imul  EBX
  3698.     add  __LeftX, EAX
  3699.  
  3700.     mov  EAX, __RightDx
  3701.     imul  EBX
  3702.     add  __RightX, EAX
  3703.  
  3704.     mov  EAX, __LeftDu
  3705.     imul  EBX
  3706.     add  __LeftU, EAX
  3707.  
  3708.     mov  EAX, __RightDu
  3709.     imul  EBX
  3710.     add  __RightU, EAX
  3711.  
  3712.     mov  EAX, __LeftDv
  3713.     imul  EBX
  3714.     add  __LeftV, EAX
  3715.  
  3716.     mov  EAX, __RightDv
  3717.     imul  EBX
  3718.     add  __RightV, EAX
  3719.  
  3720.     mov  EAX, __LeftDh
  3721.     imul  EBX
  3722.     add  __LeftH, EAX
  3723.  
  3724.     mov  EAX, __RightDh
  3725.     imul  EBX
  3726.     add  __RightH, EAX
  3727.     
  3728.     mov  EAX, __AddDest
  3729.     imul  EBX
  3730.     add  __DestBuffer, EAX
  3731.  
  3732.   CheckClippedTextureFlatHazeHorz :
  3733.     cmp  ECX, 0
  3734.     jne  DrawTextureFlatHazeHorzClip
  3735.  
  3736.   DrawTextureFlatHazeHorzNoClip :
  3737.     cld
  3738.     mov  ESI, LoopCount
  3739.     cmp  ESI, 0
  3740.     jle  EndLoopOutTextureFlatHazeHorz
  3741.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3742.     nop          
  3743.  
  3744.     LoopOutTextureFlatHazeHorz :
  3745.       mov  EBX, __LeftX    ; U
  3746.       mov  EAX, EBX        ; U
  3747.       add  EBX, __LeftDx   ; V
  3748.       sar  EAX, 16         ; U EAX is the Left X
  3749.       mov  __LeftX, EBX    ; V
  3750.  
  3751.       mov  EDX, __RightX   ; U
  3752.       mov  ECX, EDX        ; U
  3753.       add  EDX, __RightDx  ; V
  3754.       sar  ECX, 16         ; U ECX is the Right X
  3755.       mov  __RightX, EDX   ; V
  3756.  
  3757.       mov  EBX, __DestBuffer  ; U
  3758.       mov  EDI, EBX           ; U
  3759.       add  EBX, __AddDest     ; V
  3760.       sub  ECX, EAX           ; U
  3761.  
  3762.       mov  __DestBuffer, EBX  ; V
  3763.  
  3764.       add  EDI, EAX           ; U
  3765.       inc  ECX                ; V
  3766.  
  3767.       cmp  ECX, 0
  3768.       jle  NextRowTextureFlatHazeHorzNoClip
  3769.  
  3770.       mov  EBP, ECX
  3771.       shl  EBP, 2
  3772.       add  EBP, __DivTable
  3773.       fld  dword ptr [EBP]
  3774.       
  3775.       mov  EBP, ECX      ; EBP is the loop
  3776.  
  3777.       mov  EAX, __LeftH    ; U     EAX is the Left Haze
  3778.       mov  EDX, __RightH   ; U     EDX is the Right Haze      
  3779.       sub  EDX, EAX
  3780.       sar  EDX, 8
  3781.       mov  EAX, EDX
  3782.       sar  EDX, 01Fh
  3783.       idiv ECX
  3784.       mov  InDeltaDh, EAX
  3785.  
  3786.       mov  EAX, __LeftU    
  3787.       mov  EDX, __RightU         
  3788.       sub  EDX, EAX
  3789.       sar  EDX, 8
  3790.       mov  InDeltaDu, EDX
  3791.       fild InDeltaDu      
  3792.       fmul st, st(1)
  3793.       fistp InDeltaDu
  3794.       
  3795.       mov  EAX, __LeftV    
  3796.       mov  EDX, __RightV         
  3797.       sub  EDX, EAX
  3798.       sar  EDX, 8
  3799.       mov  InDeltaDv, EDX
  3800.       fild InDeltaDv      
  3801.       fmul st, st(1)
  3802.       fistp InDeltaDv
  3803.  
  3804.       fstp DummyFloat
  3805.  
  3806.       push ESI
  3807.  
  3808.       mov  ECX, __LeftU
  3809.       mov  EDX, __LeftV
  3810.       sar  ECX, 8
  3811.       sar  EDX, 8
  3812.  
  3813.       mov  EAX, __LeftI
  3814.       sar  EAX, 8
  3815.       mov  ESI, __ShadeBuffer
  3816.       mov  InLoopCount, BP
  3817.       mov  EBP, __LeftH
  3818.       sar  EBP, 8
  3819.       
  3820.         InLoopTextureFlatHazeHorz :
  3821.           mov  EBX, 0
  3822.           mov  BH, DH
  3823.           mov  BL, CH
  3824.           add  ECX, InDeltaDu
  3825.           add  EBX, __TextureBuffer
  3826.           mov  AL, [EBX]
  3827.           add  EDX, InDeltaDv
  3828.           mov  EBX, EBP
  3829.           mov  BL, [ESI+EAX]
  3830.           add  EBX, __HazeBuffer
  3831.           add  EBP, InDeltaDh
  3832.           mov  BL, [EBX]
  3833.           mov  [EDI], BL
  3834.           inc  EDI
  3835.           dec  InLoopCount
  3836.           jnz  InLoopTextureFlatHazeHorz
  3837.     
  3838.       pop  ESI
  3839.  
  3840.       NextRowTextureFlatHazeHorzNoClip : 
  3841.         mov  EAX, __LeftU
  3842.         mov  EBX, __LeftV
  3843.         add  EAX, __LeftDu
  3844.         add  EBX, __LeftDv
  3845.         mov  __LeftU, EAX
  3846.         mov  __LeftV, EBX
  3847.  
  3848.         mov  EAX, __RightU
  3849.         mov  EBX, __RightV
  3850.         add  EAX, __RightDu
  3851.         add  EBX, __RightDv
  3852.         mov  __RightU, EAX
  3853.         mov  __RightV, EBX
  3854.  
  3855.         mov  EAX, __LeftH
  3856.         mov  EBX, __RightH
  3857.         add  EAX, __LeftDh
  3858.         add  EBX, __RightDh
  3859.         mov  __LeftH, EAX
  3860.         mov  __RightH, EBX
  3861.  
  3862.         dec  ESI
  3863.       jnz  LoopOutTextureFlatHazeHorz
  3864.       jmp  EndLoopOutTextureFlatHazeHorz
  3865.  
  3866.   DrawTextureFlatHazeHorzClip :
  3867.     cld
  3868.     mov  ESI, LoopCount
  3869.     cmp  ESI, 0
  3870.     jle  EndLoopOutTextureFlatHazeHorz
  3871.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  3872.     nop          
  3873.  
  3874.     LoopOutClippedTextureFlatHazeHorz :
  3875.       mov  EBX, __LeftX    ; U
  3876.       mov  EAX, EBX        ; U
  3877.       add  EBX, __LeftDx   ; V
  3878.       sar  EAX, 16         ; U EAX is the Left X
  3879.       mov  __LeftX, EBX    ; V
  3880.  
  3881.       mov  EDX, __RightX   ; U
  3882.       mov  ECX, EDX        ; U
  3883.       add  EDX, __RightDx  ; V
  3884.       sar  ECX, 16         ; U ECX is the Right X
  3885.       mov  __RightX, EDX   ; V
  3886.  
  3887.       mov  EBX, __DestBuffer  ; U
  3888.       mov  EDI, EBX           ; U
  3889.       add  EBX, __AddDest     ; V
  3890.       mov  __DestBuffer, EBX  ; U
  3891.  
  3892.       mov  TempLen, ECX
  3893.       sub  TempLen, EAX
  3894.       inc  TempLen
  3895.       mov  EBX, 0
  3896.  
  3897.         ; Check for Easy reject
  3898.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  3899.         jg   NextRowTextureFlatHazeHorz
  3900.         cmp  ECX, VMinX      ; Right is smaller than MinX
  3901.         jl   NextRowTextureFlatHazeHorz
  3902.  
  3903.         ; Check for Left
  3904.         cmp  EAX, VMinX
  3905.         jge  CheckRightTextureFlatHazeHorz
  3906.           mov  EBX, VMinX
  3907.           sub  EBX, EAX
  3908.           mov  EAX, VMinX    ; Set Left to MinX
  3909.  
  3910.         ; Check for Right
  3911.         CheckRightTextureFlatHazeHorz :
  3912.           cmp  ECX, VMaxX
  3913.           jle  StartTextureFlatHazeHorz
  3914.           mov  ECX, VMaxX    ; Set Right to MaxX
  3915.  
  3916.     StartTextureFlatHazeHorz :
  3917.       sub  ECX, EAX
  3918.       inc  ECX
  3919.       add  EDI, EAX
  3920.  
  3921.       cmp  ECX, 0
  3922.       jle  NextRowTextureFlatHazeHorz
  3923.  
  3924.       mov  EBP, TempLen
  3925.       shl  EBP, 2
  3926.       add  EBP, __DivTable
  3927.       fld  dword ptr [EBP]
  3928.  
  3929.       mov  EBP, ECX      ; EBP is the loop
  3930.  
  3931.       mov  ECX, TempLen
  3932.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  3933.  
  3934.       mov  EAX, __LeftH    ; U     EAX is the Left Haze
  3935.       mov  EDX, __RightH   ; U     EDX is the Right Haze      
  3936.       sub  EDX, EAX
  3937.       sar  EDX, 8
  3938.       mov  EAX, EDX
  3939.       sar  EDX, 01Fh
  3940.       idiv ECX
  3941.       mov  InDeltaDh, EAX
  3942.  
  3943.       mov  EAX, __LeftU    
  3944.       mov  EDX, __RightU         
  3945.       sub  EDX, EAX
  3946.       sar  EDX, 8
  3947.       mov  InDeltaDu, EDX
  3948.       fild InDeltaDu      
  3949.       fmul st, st(1)
  3950.       fistp InDeltaDu
  3951.       
  3952.       mov  EAX, __LeftV    
  3953.       mov  EDX, __RightV         
  3954.       sub  EDX, EAX
  3955.       sar  EDX, 8
  3956.       mov  InDeltaDv, EDX
  3957.       fild InDeltaDv      
  3958.       fmul st, st(1)
  3959.       fistp InDeltaDv
  3960.  
  3961.       fstp DummyFloat
  3962.  
  3963.       push ESI
  3964.  
  3965.       mov  InLoopCount, BP
  3966.       
  3967.       mov  EAX, InDeltaDh
  3968.       imul TempLen
  3969.       mov  EBP, __LeftH
  3970.       sar  EBP, 8
  3971.       add  EBP, EAX
  3972.  
  3973.       mov  EAX, InDeltaDu
  3974.       imul TempLen
  3975.       mov  ECX, __LeftU
  3976.       sar  ECX, 8
  3977.       add  ECX, EAX
  3978.  
  3979.       mov  EAX, InDeltaDv
  3980.       imul TempLen
  3981.       mov  EDX, __LeftV
  3982.       sar  EDX, 8
  3983.       add  EDX, EAX
  3984.  
  3985.       mov  EAX, __LeftI
  3986.       sar  EAX, 8
  3987.       mov  ESI, __ShadeBuffer
  3988.       
  3989.         InLoopClippedTextureFlatHazeHorz :
  3990.           mov  EBX, 0
  3991.           mov  BH, DH
  3992.           mov  BL, CH
  3993.           add  ECX, InDeltaDu
  3994.           add  EBX, __TextureBuffer
  3995.           mov  AL, [EBX]
  3996.           add  EDX, InDeltaDv
  3997.           mov  EBX, EBP
  3998.           mov  BL, [ESI+EAX]
  3999.           add  EBX, __HazeBuffer
  4000.           add  EBP, InDeltaDh
  4001.           mov  BL, [EBX]
  4002.           mov  [EDI], BL
  4003.           inc  EDI
  4004.           dec  InLoopCount
  4005.           jnz  InLoopClippedTextureFlatHazeHorz
  4006.     
  4007.       pop  ESI
  4008.  
  4009.       NextRowTextureFlatHazeHorz : 
  4010.         mov  EAX, __LeftU
  4011.         mov  EBX, __LeftV
  4012.         add  EAX, __LeftDu
  4013.         add  EBX, __LeftDv
  4014.         mov  __LeftU, EAX
  4015.         mov  __LeftV, EBX
  4016.  
  4017.         mov  EAX, __RightU
  4018.         mov  EBX, __RightV
  4019.         add  EAX, __RightDu
  4020.         add  EBX, __RightDv
  4021.         mov  __RightU, EAX
  4022.         mov  __RightV, EBX
  4023.  
  4024.         mov  EAX, __LeftH
  4025.         mov  EBX, __RightH
  4026.         add  EAX, __LeftDh
  4027.         add  EBX, __RightDh
  4028.         mov  __LeftH, EAX
  4029.         mov  __RightH, EBX
  4030.  
  4031.         dec  ESI
  4032.       jnz  LoopOutClippedTextureFlatHazeHorz
  4033.  
  4034.   EndLoopOutTextureFlatHazeHorz :
  4035.  
  4036.   pop  ESI
  4037.   pop  EDI
  4038.   pop  EBP
  4039.   ret
  4040. _DrawTextureFlatHazeHorz_ ENDP
  4041.  
  4042.  
  4043. ; _DrawTextureGrdHazeHorz ( LONG Color, LONG LoopCount, LONG SkipRow, LONG SideClipped )
  4044. ;
  4045. ; EAX = Color, EDX = LoopCount, EBX = SkipRow, ECX = SideClipped
  4046.  
  4047. _DrawTextureGrdHazeHorz_ PROC C
  4048.   push EBP
  4049.   push EDI
  4050.   push ESI  
  4051.   
  4052.   mov  Color, EAX
  4053.  
  4054.   sub  EDX, EBX
  4055.   mov  LoopCount, EDX
  4056.  
  4057.   cmp  EBX, 0
  4058.   je   CheckClippedTextureGrdHazeHorz 
  4059.  
  4060.     mov  EAX, __LeftDx
  4061.     imul  EBX
  4062.     add  __LeftX, EAX
  4063.  
  4064.     mov  EAX, __RightDx
  4065.     imul  EBX
  4066.     add  __RightX, EAX
  4067.  
  4068.     mov  EAX, __LeftDu
  4069.     imul  EBX
  4070.     add  __LeftU, EAX
  4071.  
  4072.     mov  EAX, __RightDu
  4073.     imul  EBX
  4074.     add  __RightU, EAX
  4075.  
  4076.     mov  EAX, __LeftDv
  4077.     imul  EBX
  4078.     add  __LeftV, EAX
  4079.  
  4080.     mov  EAX, __RightDv
  4081.     imul  EBX
  4082.     add  __RightV, EAX
  4083.  
  4084.     mov  EAX, __LeftDI
  4085.     imul  EBX
  4086.     add  __LeftI, EAX
  4087.  
  4088.     mov  EAX, __RightDI
  4089.     imul  EBX
  4090.     add  __RightI, EAX
  4091.  
  4092.     mov  EAX, __LeftDh
  4093.     imul  EBX
  4094.     add  __LeftH, EAX
  4095.  
  4096.     mov  EAX, __RightDh
  4097.     imul  EBX
  4098.     add  __RightH, EAX
  4099.     
  4100.     mov  EAX, __AddDest
  4101.     imul  EBX
  4102.     add  __DestBuffer, EAX
  4103.  
  4104.   CheckClippedTextureGrdHazeHorz :
  4105.     cmp  ECX, 0
  4106.     jne  DrawTextureGrdHazeHorzClip
  4107.  
  4108.   DrawTextureGrdHazeHorzNoClip :
  4109.     cld
  4110.     mov  ESI, LoopCount
  4111.     cmp  ESI, 0
  4112.     jle  EndLoopOutTextureGrdHazeHorz
  4113.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  4114.     nop          
  4115.  
  4116.     LoopOutTextureGrdHazeHorz :
  4117.       mov  EBX, __LeftX    ; U
  4118.       mov  EAX, EBX        ; U
  4119.       add  EBX, __LeftDx   ; V
  4120.       sar  EAX, 16         ; U EAX is the Left X
  4121.       mov  __LeftX, EBX    ; V
  4122.  
  4123.       mov  EDX, __RightX   ; U
  4124.       mov  ECX, EDX        ; U
  4125.       add  EDX, __RightDx  ; V
  4126.       sar  ECX, 16         ; U ECX is the Right X
  4127.       mov  __RightX, EDX   ; V
  4128.  
  4129.       mov  EBX, __DestBuffer  ; U
  4130.       mov  EDI, EBX           ; U
  4131.       add  EBX, __AddDest     ; V
  4132.       sub  ECX, EAX           ; U
  4133.  
  4134.       mov  __DestBuffer, EBX  ; V
  4135.  
  4136.       add  EDI, EAX           ; U
  4137.       inc  ECX                ; V
  4138.  
  4139.       cmp  ECX, 0
  4140.       jle  NextRowTextureGrdHazeHorzNoClip
  4141.  
  4142.       mov  EBP, ECX
  4143.       shl  EBP, 2
  4144.       add  EBP, __DivTable
  4145.       fld  dword ptr [EBP]
  4146.       
  4147.       mov  EBP, ECX      ; EBP is the loop
  4148.  
  4149.       mov  EAX, __LeftI    ; U
  4150.       mov  EDX, __RightI   ; U      
  4151.       sub  EDX, EAX
  4152.       sar  EDX, 8
  4153.       mov  EAX, EDX
  4154.       sar  EDX, 01Fh
  4155.       idiv ECX
  4156.       mov  InDeltaDI, EAX
  4157.  
  4158.       mov  EAX, __LeftH    ; U
  4159.       mov  EDX, __RightH   ; U      
  4160.       sub  EDX, EAX
  4161.       sar  EDX, 8
  4162.       mov  EAX, EDX
  4163.       sar  EDX, 01Fh
  4164.       idiv ECX
  4165.       mov  InDeltaDh, EAX
  4166.  
  4167.       mov  EAX, __LeftU
  4168.       mov  EDX, __RightU         
  4169.       sub  EDX, EAX
  4170.       sar  EDX, 8
  4171.       mov  InDeltaDu, EDX
  4172.       fild InDeltaDu      
  4173.       fmul st, st(1)
  4174.       fistp InDeltaDu
  4175.       
  4176.       mov  EAX, __LeftV    
  4177.       mov  EDX, __RightV         
  4178.       sub  EDX, EAX
  4179.       sar  EDX, 8
  4180.       mov  InDeltaDv, EDX
  4181.       fild InDeltaDv      
  4182.       fmul st, st(1)
  4183.       fistp InDeltaDv
  4184.  
  4185.       fstp DummyFloat
  4186.  
  4187.       push ESI
  4188.  
  4189.       mov  ECX, __LeftU
  4190.       mov  EDX, __LeftV
  4191.       mov  ESI, __LeftI
  4192.       sar  ECX, 8
  4193.       sar  EDX, 8
  4194.       sar  ESI, 8
  4195.       mov  InLoopCount, BP
  4196.       mov  EBP, __LeftH
  4197.       sar  EBP, 8
  4198.      
  4199.         InLoopTextureGrdHazeHorz :
  4200.           mov  EBX, 0
  4201.           mov  BH, DH
  4202.           mov  BL, CH
  4203.           add  ECX, InDeltaDu
  4204.           add  EBX, __TextureBuffer
  4205.           mov  EAX, ESI
  4206.           mov  AL, [EBX]
  4207.           add  EDX, InDeltaDv
  4208.           add  EAX, __ShadeBuffer
  4209.           mov  EBX, EBP
  4210.           mov  BL, [EAX]
  4211.           add  EBX, __HazeBuffer
  4212.           add  EBP, InDeltaDh
  4213.           add  ESI, InDeltaDI
  4214.           mov  BL, [EBX]
  4215.           mov  [EDI], BL
  4216.           inc  EDI
  4217.           dec  InLoopCount
  4218.           jnz  InLoopTextureGrdHazeHorz
  4219.    
  4220.       pop  ESI
  4221.  
  4222.       NextRowTextureGrdHazeHorzNoClip :
  4223.         mov  EAX, __LeftU
  4224.         mov  EBX, __LeftV
  4225.         add  EAX, __LeftDu
  4226.         add  EBX, __LeftDv
  4227.         mov  __LeftU, EAX
  4228.         mov  __LeftV, EBX
  4229.  
  4230.         mov  EAX, __RightU
  4231.         mov  EBX, __RightV
  4232.         add  EAX, __RightDu
  4233.         add  EBX, __RightDv
  4234.         mov  __RightU, EAX
  4235.         mov  __RightV, EBX
  4236.  
  4237.         mov  EAX, __LeftI
  4238.         mov  EBX, __RightI
  4239.         add  EAX, __LeftDI
  4240.         add  EBX, __RightDI
  4241.         mov  __LeftI, EAX
  4242.         mov  __RightI, EBX
  4243.  
  4244.         mov  EAX, __LeftH
  4245.         mov  EBX, __RightH
  4246.         add  EAX, __LeftDh
  4247.         add  EBX, __RightDh
  4248.         mov  __LeftH, EAX
  4249.         mov  __RightH, EBX
  4250.  
  4251.         dec  ESI
  4252.       jnz  LoopOutTextureGrdHazeHorz
  4253.       jmp  EndLoopOutTextureGrdHazeHorz
  4254.  
  4255.   DrawTextureGrdHazeHorzClip :
  4256.     cld
  4257.     mov  ESI, LoopCount
  4258.     cmp  ESI, 0
  4259.     jle  EndLoopOutTextureGrdHazeHorz
  4260.     adc  EAX, 0        ; Make sure the loop starts with U pipe
  4261.     nop          
  4262.  
  4263.     LoopOutClippedTextureGrdHazeHorz :
  4264.       mov  EBX, __LeftX    ; U
  4265.       mov  EAX, EBX        ; U
  4266.       add  EBX, __LeftDx   ; V
  4267.       sar  EAX, 16         ; U EAX is the Left X
  4268.       mov  __LeftX, EBX    ; V
  4269.  
  4270.       mov  EDX, __RightX   ; U
  4271.       mov  ECX, EDX        ; U
  4272.       add  EDX, __RightDx  ; V
  4273.       sar  ECX, 16         ; U ECX is the Right X
  4274.       mov  __RightX, EDX   ; V
  4275.  
  4276.       mov  EBX, __DestBuffer  ; U
  4277.       mov  EDI, EBX           ; U
  4278.       add  EBX, __AddDest     ; V
  4279.       mov  __DestBuffer, EBX  ; U
  4280.  
  4281.       mov  TempLen, ECX
  4282.       sub  TempLen, EAX
  4283.       inc  TempLen
  4284.       mov  EBX, 0
  4285.  
  4286.         ; Check for Easy reject
  4287.         cmp  EAX, VMaxX      ; Left is greater than MaxX
  4288.         jg   NextRowTextureGrdHazeHorz
  4289.         cmp  ECX, VMinX      ; Right is smaller than MinX
  4290.         jl   NextRowTextureGrdHazeHorz
  4291.  
  4292.         ; Check for Left
  4293.         cmp  EAX, VMinX
  4294.         jge  CheckRightTextureGrdHazeHorz
  4295.           mov  EBX, VMinX
  4296.           sub  EBX, EAX
  4297.           mov  EAX, VMinX    ; Set Left to MinX
  4298.  
  4299.         ; Check for Right
  4300.         CheckRightTextureGrdHazeHorz :
  4301.           cmp  ECX, VMaxX
  4302.           jle  StartTextureGrdHazeHorz
  4303.           mov  ECX, VMaxX    ; Set Right to MaxX
  4304.  
  4305.     StartTextureGrdHazeHorz :
  4306.       sub  ECX, EAX
  4307.       inc  ECX
  4308.       add  EDI, EAX
  4309.  
  4310.       cmp  ECX, 0
  4311.       jle  NextRowTextureGrdHazeHorz
  4312.  
  4313.       mov  EBP, TempLen
  4314.       shl  EBP, 2
  4315.       add  EBP, __DivTable
  4316.       fld  dword ptr [EBP]
  4317.  
  4318.       mov  EBP, ECX      ; EBP is the loop
  4319.  
  4320.       mov  ECX, TempLen
  4321.       mov  TempLen, EBX    ; TempLen is now the skip pixel in x-direction
  4322.  
  4323.       mov  EAX, __LeftI    ; U
  4324.       mov  EDX, __RightI   ; U      
  4325.       sub  EDX, EAX
  4326.       sar  EDX, 8
  4327.       mov  EAX, EDX
  4328.       sar  EDX, 01Fh
  4329.       idiv ECX
  4330.       mov  InDeltaDI, EAX
  4331.  
  4332.       mov  EAX, __LeftH    ; U
  4333.       mov  EDX, __RightH   ; U      
  4334.       sub  EDX, EAX
  4335.       sar  EDX, 8
  4336.       mov  EAX, EDX
  4337.       sar  EDX, 01Fh
  4338.       idiv ECX
  4339.       mov  InDeltaDh, EAX
  4340.  
  4341.       mov  EAX, __LeftU    
  4342.       mov  EDX, __RightU         
  4343.       sub  EDX, EAX
  4344.       sar  EDX, 8
  4345.       mov  InDeltaDu, EDX
  4346.       fild InDeltaDu      
  4347.       fmul st, st(1)
  4348.       fistp InDeltaDu
  4349.       
  4350.       mov  EAX, __LeftV    
  4351.       mov  EDX, __RightV         
  4352.       sub  EDX, EAX
  4353.       sar  EDX, 8
  4354.       mov  InDeltaDv, EDX
  4355.       fild InDeltaDv      
  4356.       fmul st, st(1)
  4357.       fistp InDeltaDv
  4358.  
  4359.       fstp DummyFloat
  4360.  
  4361.       push ESI
  4362.  
  4363.       mov  InLoopCount, BP
  4364.       
  4365.       mov  EAX, InDeltaDh
  4366.       imul TempLen
  4367.       mov  EBP, __LeftH
  4368.       sar  EBP, 8
  4369.       add  EBP, EAX
  4370.  
  4371.       mov  EAX, InDeltaDu
  4372.       imul TempLen
  4373.       mov  ECX, __LeftU
  4374.       sar  ECX, 8
  4375.       add  ECX, EAX
  4376.  
  4377.       mov  EAX, InDeltaDI
  4378.       imul TempLen
  4379.       mov  ESI, __LeftI
  4380.       sar  ESI, 8
  4381.       add  ESI, EAX
  4382.       
  4383.       mov  EAX, InDeltaDv
  4384.       imul TempLen
  4385.       mov  EDX, __LeftV
  4386.       sar  EDX, 8
  4387.       add  EDX, EAX
  4388.        
  4389.         InLoopClippedTextureGrdHazeHorz :
  4390.           mov  EBX, 0
  4391.           mov  BH, DH
  4392.           mov  BL, CH
  4393.           add  ECX, InDeltaDu
  4394.           add  EBX, __TextureBuffer
  4395.           mov  EAX, ESI
  4396.           mov  AL, [EBX]
  4397.           add  EDX, InDeltaDv
  4398.           add  EAX, __ShadeBuffer
  4399.           mov  EBX, EBP
  4400.           mov  BL, [EAX]
  4401.           add  EBX, __HazeBuffer
  4402.           add  EBP, InDeltaDh
  4403.           add  ESI, InDeltaDI
  4404.           mov  BL, [EBX]
  4405.           mov  [EDI], BL
  4406.           inc  EDI
  4407.           dec  InLoopCount
  4408.           jnz  InLoopClippedTextureGrdHazeHorz
  4409.     
  4410.       pop  ESI
  4411.  
  4412.       NextRowTextureGrdHazeHorz : 
  4413.         mov  EAX, __LeftU
  4414.         mov  EBX, __LeftV
  4415.         add  EAX, __LeftDu
  4416.         add  EBX, __LeftDv
  4417.         mov  __LeftU, EAX
  4418.         mov  __LeftV, EBX
  4419.    
  4420.         mov  EAX, __RightU
  4421.         mov  EBX, __RightV
  4422.         add  EAX, __RightDu
  4423.         add  EBX, __RightDv
  4424.         mov  __RightU, EAX
  4425.         mov  __RightV, EBX
  4426.  
  4427.         mov  EAX, __LeftI
  4428.         mov  EBX, __RightI
  4429.         add  EAX, __LeftDI
  4430.         add  EBX, __RightDI
  4431.         mov  __LeftI, EAX
  4432.         mov  __RightI, EBX
  4433.  
  4434.         mov  EAX, __LeftH
  4435.         mov  EBX, __RightH
  4436.         add  EAX, __LeftDh
  4437.         add  EBX, __RightDh
  4438.         mov  __LeftH, EAX
  4439.         mov  __RightH, EBX
  4440.  
  4441.         dec  ESI
  4442.       jnz  LoopOutClippedTextureGrdHazeHorz
  4443.  
  4444.   EndLoopOutTextureGrdHazeHorz :
  4445.  
  4446.   pop  ESI
  4447.   pop  EDI
  4448.   pop  EBP
  4449.   ret
  4450. _DrawTextureGrdHazeHorz_ ENDP
  4451.  
  4452.  
  4453. END
  4454.